C# では、public、private、protected、アクセス修飾子なしの違いは何ですか? 質問する

C# では、public、private、protected、アクセス修飾子なしの違いは何ですか? 質問する

大学時代ずっと を使ってきましたが、 、、publicの違いを知りたいです。publicprivateprotected

また、static何もしないこととは対照的に、何をするのでしょうか?

ベストアンサー1

アクセス修飾子

から詳しくはこちら:

public

型またはメンバーには、同じアセンブリ内の他のコード、またはそれを参照する別のアセンブリからアクセスできます。

private

型またはメンバーには、同じクラスまたは構造体内のコードからのみアクセスできます。

protected

型またはメンバーには、同じクラスまたは構造体内のコード、または派生クラス内のコードからのみアクセスできます。

private protected(C# 7.2 で追加)

型またはメンバーには、同じクラスまたは構造体内のコード、または同じアセンブリからの派生クラスのコードからのみアクセスできますが、別のアセンブリからはアクセスできません。

internal

型またはメンバーには、同じアセンブリ内の任意のコードからアクセスできますが、別のアセンブリからはアクセスできません。

protected internal

型またはメンバーには、同じアセンブリ内の任意のコード、または別のアセンブリ内の任意の派生クラスからアクセスできます。

アクセス修飾子が設定されていない場合は、デフォルトのアクセス修飾子が使用されます。そのため、設定されていない場合でも、何らかの形のアクセス修飾子が常に存在します。

static修飾子

クラスの static 修飾子は、クラスをインスタンス化できず、そのメンバーがすべて静的であることを意味します。静的メンバーには、その包含型のインスタンスがいくつ作成されても、1 つのバージョンが存在します。

静的クラスは基本的に非静的クラスと同じですが、1 つの違いがあります。静的クラスは外部でインスタンス化できません。つまり、new キーワードを使用してクラス型の変数を作成することはできません。インスタンス変数がないため、静的クラスのメンバーにアクセスするには、クラス名自体を使用します。

しかし、静的コンストラクタ静的クラスを含むすべてのクラスは、これらのいずれかを持つことができます。これらは直接呼び出すことはできず、パラメータを持つことはできません (クラス自体の型パラメータを除く)。静的コンストラクターは、最初のインスタンスが作成されるか、静的メンバーが参照される前に、クラスを初期化するために自動的に呼び出されます。次のようになります。

static class Foo()
{
    static Foo()
    {
        Bar = "fubar";
    }
    
    public static string Bar { get; set; }
}

静的クラスはサービスとしてよく使用され、次のように使用できます。

MyStaticClass.ServiceMethod(...);

おすすめ記事