web-dev-qa-db-ja.com

C#で「プライベート」キーワードを記述する理由は何ですか?

私の知る限り、C#ではprivateがデフォルトのeverywhereです(つまり、publicprotectedinternalなど。デフォルトではprivateになります)。 (間違っている場合は修正してください。)

それでは、そのキーワードを書く理由は何ですか、それともメンバーにとっても存在するのでしょうか?

たとえば、イベントハンドラが自動生成される場合、次のようになります。

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{

}

しかし、それが暗示され、デフォルトである場合、なぜプライベートも書きますか?初心者開発者(C#のデフォルトだとは知らない)がプライベートであることを知っているように?または、コンパイラに違いはありますか?

さらに、「プライベート」(単独)ウィルと書くと、メンバーのアクセシビリティが変わる場合がありますか?

105
Camilo Martin

私の知る限り、プライベートはC#のすべての場所でデフォルトです(つまり、public、protected、internalなどを記述しないと、デフォルトでプライベートになります)。 (間違っている場合は修正してください)。

本当じゃない。名前空間内で定義された型(クラス、構造体、インターフェースなど)は、デフォルトでinternalになります。また、異なるタイプ内のメンバーは、異なるデフォルトのアクセシビリティ(インターフェースメンバーのパブリックなど)を持っています。詳細については、MSDNの アクセシビリティレベル を参照してください。

また、

それで、そのキーワードを書く理由は何ですか、またはなぜそれが存在するのですか?

これを明示的に指定すると、タイプを非常に明示的にプライベートにする意図を示すのに役立ちます。これは、長期にわたるコードの保守性に役立ちます。これは、他の開発者(または自分)が、デフォルトでメンバーがプライベートであるか、意図的にメンバーがプライベートであるかなどを知るのに役立ちます。

166
Reed Copsey

私の知る限り、プライベートはC#のどこでもデフォルトです

完全ではありません-デフォルトは「この宣言に利用できる最も制限されたアクセス」です。そのため、たとえば、トップレベルタイプでは、デフォルトはinternal;です。ネストされたタイプの場合、デフォルトはprivateです。

それで、そのキーワードを書く理由は何ですか、またはなぜそれが存在するのですか?

明示的にしますが、これには2つの理由があります。

  • あなたの質問に応じて、デフォルトを知らない人にとってはそれがより明確になります(個人的にはこの議論が好きではありませんでしたが、言及する価値があると思いました)
  • 意図的にデフォルトのままにするのではなく、プライベートにすることを決めたという印象を与えます。

あなたの最後の部分に関して:

さらに、「プライベート」(単独)を書くと、メンバーのアクセシビリティが変わる場合がありますか?

はい、プロパティの半分を他のプロパティよりも制限するため:

// Public getter, public setter
public int Foo { get; set; }

// Public getter, private setter
public int Bar { get; private set; }

私はsed私ができる限りどこでもデフォルトのままにしますが、あなたはそれについて考えたことを明確にすることを確信しました(一部はEric Lippertによって)decided toプライベートなものを作るのは良い考えです。

個人的には、タイプ宣言のために、封印された/封印されていない、それもhaveデフォルトではないかもしれません。多くの開発者(私が注意しなければ自分も含めて)は、クラスを封印するよりも労力が少ないという理由だけで、クラスを封印しないままにしていると思います。

117
Jon Skeet

privateは視覚的な混乱を追加します。物事を明確にすることを主張する人には、私は尋ねます:あなたも数学でこれをしますか?例えば:

var answer = a + b / c;

b / cの周りに余分な括弧がなければ、それが不明確だと思いますか?

C#のルールは非常に単純です:デフォルトでは、すべてが可能な限りプライベートに近くなっています。したがって、more /にする必要がある場合デフォルトより表示、修飾子を追加します。それ以外の場合は、コードに不要なキーワードを追加しないでください。

11
Ryan Lundy

私の知る限り、プライベートはC#のどこでもデフォルトです

privateを明示的に宣言するということは、knowそれがプライベートであることを意味します。あなたが知っている限り、それがデフォルトであるため、それがそうだと思うだけではありません。また、コードを見た誰かがそれが何であるかを知っていることも意味します。

「それだと思う」、「そうだと確信している」などはありません。それはただ。そして、誰もが同じページにいます。

私はC#開発者ではありません。明示的に宣言されていないコードprivateを使用する必要がある場合、おそらくinternalであると想定します

暗黙のうちに物事が設定されるのは嫌いです。それらが明示的に設定されている場合ほど明確ではありません。

7
JD Isaacks

読みやすさ-プライベートがデフォルトの動作であることを誰もが知っているとは限りません。

意図-プロパティがプライベートであることを明確に示します(何らかの理由で)。

6
James

読みやすさ、意図の実証は、私が考えることができる2つの大きな理由です。

5
Maess

可視性を明示的に指定する理由の1つは、現在のコンテキストのデフォルトが何であるかを考える必要がないようにするためです。

もう1つの正当な理由は、 FxCop を実行するように指示するためです。

3

多くの人(私のような人!)が定期的にいくつかの異なる言語でプログラムを作成しています。このようなことを明示することで、プログラミングするすべての言語の不可解な詳細をすべて覚える必要がなくなります。

2
davidtbernal

クラスの残りのスコープの可読性との一貫性のために言いたいです。

0
MGZero