771

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

また、何も持たstaticないのではなく、何をしますか?

4

17 に答える 17

1062

アクセス修飾子

docs.microsoft.comから:

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(...);
于 2009-03-05T13:55:02.313 に答える
22

何もないという質問について

  • 名前空間の型はデフォルトで internal です
  • 入れ子になった型を含むすべての型メンバーは、既定でプライベートです
于 2009-03-05T17:27:55.187 に答える
11

うーん。

こちらを参照してください: Access Modifiers

手短に:

Public は、メソッドまたは型に他の型/クラスからの完全な可視性を与えます。

Private では、プライベート メソッド/変数を含む型のみがプライベート メソッド/変数へのアクセスを許可されます (ネストされたクラスも含まれるクラスのプライベート メソッド/変数にアクセスできることに注意してください)。

Protected は、派生クラスも保護されたメソッドにアクセスできることを除いて、private に似ています。

"Nothing" は VB.NET の null に相当します。「アクセス修飾子なし」を意味する「なし」を参照している場合は、場合によって異なりますが、非常に大まかな経験則 (確かに C#) では、アクセス修飾子を明示的に指定しない場合、メソッド/変数宣言は通常、可能な限り制限されています。すなわち

public class MyClass
{
    string s = "";
}

実質的には以下と同じです:

public class MyClass
{
    private string s = "";
}

アクセス修飾子が明示的に指定されていない場合は、リンクされた MSDN 記事で完全な説明が提供されます。

于 2009-03-05T13:53:57.370 に答える
10

public - 誰でもどこからでもアクセスできます。
private - 所属するクラス内からのみアクセスできます。
protected - クラス内またはクラスから継承するオブジェクトからのみアクセスできます。

null のようなものはありませんが、VB では.
静的とは、そのオブジェクトのインスタンスが 1 つ、そのクラスのすべてのインスタンスのメソッドがあることを意味します。

于 2009-03-05T13:55:40.283 に答える
4

Privateのステータスは、変数にアクセスできるのは同じクラスのオブジェクトのみであることを示します。保護されたステータスは、そのアクセスを拡張して、クラスの子孫も含めます。

「上の表から、プライベートとプロテクトの違いを見ることができます...両方とも同じだと思います....その2つの別々のコマンドの必要性は何ですか?」

詳細については、 MSDNリンクを確認してください

于 2010-07-07T08:13:49.003 に答える
4

うーん...

静的とは、クラスのインスタンスがなくてもその関数にアクセスできることを意味します。

クラス定義から直接アクセスできます。

于 2009-03-05T13:53:14.050 に答える
3

これらのアクセス修飾子は、メンバーが表示される場所を指定します。おそらくこれを読んでください。出発点として、IainMH によって提供されたリンクを使用してください。

静的メンバーは、インスタンスごとではなく、クラスごとに 1 つです。

于 2009-03-05T13:52:47.687 に答える
2

それは良いOOP設計に関係していると思います。あなたがライブラリの開発者であれば、ライブラリの内部の仕組みを隠したいと思うでしょう。そうすれば、後でライブラリの内部構造を変更できます。したがって、メンバーとヘルパー メソッドをプライベートとして配置すると、インターフェイス メソッドのみがパブリックになります。上書きする必要があるメソッドは保護する必要があります。

于 2009-03-05T13:57:36.440 に答える