[c#] パブリック、プライベート、プロテクト、およびナッシングの違いは何ですか?



Answers

Public - クラスが見える場合は、メソッドを見ることができます

プライベート - あなたがクラスの一員であれば、そうでなければメソッドを見ることができます。

Protected - Privateと同じですが、すべての子孫もメソッドを見ることができます。

静的(クラス) - "クラス"と "オブジェクト"の区別を覚えていますか? すべてを忘れて。 彼らは "静的"と同じです...クラスはそれ自身の1つの唯一のインスタンスです。

静的(メソッド) - このメソッドを使用すると、そのメソッドの一部であるクラスの実際のインスタンスとは独立した参照フレームを持ちます。

Question

私の大学時代、私はpublicされてきました。 publicprivateprotected違いを知りたいですか?

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




私はそれが良いOOPデザインに関連していると思います。 ライブラリの開発者は、ライブラリの内部の動作を隠したいと思っています。 そうすれば、後でライブラリ内部の動作を変更できます。 だからあなたのメンバーとヘルパーメソッドをプライベートとして置き、インターフェイスメソッドだけが公開されます。 上書きすべきメソッドは保護されるべきです。




これらのアクセス修飾子は、メンバーが表示される場所を指定します。 あなたはおそらくこれを読むべきです。 IainMHのリンクを出発点にしてください。

静的メンバーはクラスごとに1つで、インスタンスごとに1つはありません。




うーん。

参照: アクセス修飾子

一言で言えば:

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

Privateは、プライベートメソッド/変数へのプライベートメソッド/変数アクセスを含む型だけを許可します(ネストされたクラスも、そのクラスを含むプライベートメソッド/変数にアクセスできます)。

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

"Nothing"はVB.NETのnullと同じです。 あなたが明示的にアクセス修飾子を指定していない場合、メソッド/変数(つまり、アクセス修飾子)が明示的に指定されていない場合、宣言は通常それができる限り制限されています。 すなわち、

public class MyClass
{
    string s = "";
}

効果的に同じです:

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

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




Nothingの問題について

  • 名前空間の型はデフォルトで内部的です
  • ネストされた型を含むすべての型メンバーは、デフォルトではプライベートです



うーん...

静的とは、そのクラスのインスタンスを持たずにその関数にアクセスできることを意味します。

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




この答えからすばらしい図を再掲載する。

Vennダイアグラムのすべてのアクセス修飾子は、より限定的なものからより乱雑なものまでです。

private

private protected : - C#7.2で追加

internal

protected

protected internal

public




Related