1. ホーム
  2. c#

[解決済み] C#では、public、private、protected、アクセス修飾子がないことの違いは何ですか?

2022-03-18 23:42:19

質問

大学時代からずっと public との違いを教えてください。 public , private および protected ?

また static は、何もない場合と比較して、どうでしょうか?

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

アクセス修飾子

から docs.microsoft.com :

<ブロッククオート

public

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

private

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

protected

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

private protected (C# 7.2 で追加)

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

internal

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

protected internal

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

いつ アクセスモディファイアなし が設定されている場合、デフォルトのアクセス修飾子が使用されます。つまり、設定されていない場合でも、常に何らかのアクセス修飾子が存在することになります。

static 修飾子

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

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

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

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

静的クラスはサービスとして使われることが多いので、こんな風に使うことができます。

MyStaticClass.ServiceMethod(...);