1. ホーム
  2. c#

[解決済み] C#のデフォルトのアクセス修飾子は何ですか?

2022-03-22 02:51:33

質問

クラス、メソッド、メンバー、コンストラクター、デリゲート、インターフェイスに対するデフォルトのアクセス修飾子は何ですか?

どのように解決するのですか?

C#のすべてのもののデフォルトのアクセスは そのメンバーに対して宣言できる最も制限されたアクセスです。 .

だから例えば

namespace MyCompany
{
    class Outer
    {
        void Foo() {}
        class Inner {}
    }
}

は、以下と同等です。

namespace MyCompany
{
    internal class Outer
    {
        private void Foo() {}
        private class Inner {}
    }
}

この例外は、プロパティの一部分(通常はセッター)を、宣言されたプロパティ自体のアクセス可能性よりも制限してしまうことです。

public string Name
{
    get { ... }
    private set { ... } // This isn't the default, have to do it explicitly
}


これは、C# 3.0仕様書に書かれていることです(3.5.1項)。

を使用するコンテキストによっては メンバ宣言が行われるのは ある種の宣言された のアクセシビリティが許可されます。 また、メンバー宣言が は、アクセス修飾子を含まない。 宣言が行われたコンテキスト が決定されます。 のアクセシビリティを宣言した。

  • 名前空間は、暗黙のうちに公開宣言されたアクセシビリティを持ちます。アクセス 修飾子は、名前空間 の宣言が必要です。
  • コンパイル単位または名前空間で宣言された型は、public または 内部で宣言されたアクセシビリティと デフォルトは内部宣言 のアクセシビリティを指定します。
  • クラスのメンバは、5種類の宣言されたアクセシビリティのいずれかを持つことができます。 で、デフォルトは private 宣言 のアクセシビリティを指定します。(ただし クラスのメンバとして宣言された 5種類の宣言された のアクセシビリティを提供するのに対し ネームスペースのメンバは パブリックまたはインターナルのみが宣言されている のアクセシビリティを向上させます)。
  • 構造体のメンバは、public、internal、private のいずれかを宣言することができます。 アクセシビリティのデフォルトはプライベート 構造体のため、宣言されたアクセシビリティ は暗黙のうちに封印されます。構造体メンバ 構造体に導入された(つまり 構造体から継承されたもの)には protectedまたはprotected internal アクセシビリティを宣言しています。(ただし 構造体のメンバとして宣言された型 は、public、internal、または private はアクセシビリティを宣言していますが、型 ネームスペースのメンバーとして宣言された は、パブリックかインターナルのみ 宣言されたアクセシビリティ)
  • インターフェースのメンバは、暗黙のうちに公開宣言されたアクセシビリティを持つ。いいえ にアクセス修飾子を付けることはできません。 インターフェイスメンバーの宣言
  • 列挙メンバは暗黙のうちにpublic宣言されたアクセシビリティを持つ。いいえ にアクセス修飾子を付けることはできません。 列挙型メンバの宣言

(ネストされた型は、"class members" または "struct members" の部分に含まれ、したがってデフォルトで private visibility になることに注意してください)。