これはそれほど問題ではありません。実際のルールは次のとおりです。
すべてのメンバーをできる限り制限的に定義します。
したがって、private
の場合はprivate
となります。それ以外の場合はinternal
またはprotected
にする必要がある場合は、それぞれinternal
またはprotected
です。それ以外の場合は、protected internal
でなければなりません。protected internal
です。それ以外の場合はpublic
であるため、public
を使用する必要があります(継承していないアセンブリの外側にあるものにアクセスする必要があります)。
今、すべてのことは、大部分はprivate
フィールド、ほとんどがpublic
のプロパティです。
public
フィールドがあるかどうかを考えてみましょう。それは有効であり、うまく動作し、非常に限定されたケースでも役に立ちます。しかし、それはまた、より脆い。 public
を持つことで、他のコードでどんな値に設定することもできます。それは大丈夫です。public
私たちは「愚かな値はありません」と言っているからです。*
しかし、突然愚かな値があるとわかったら、フィールドが変更されるたびに何かする必要があります、またはプロパティのみのデータバインディングで作業する必要があります。ここでは、フィールドをプロパティに変えなければならないでしょう。それは大きな変化です。このクラスを使用しているコードは再コンパイルする必要があります。クラスを使用している唯一の人であれば大きな問題ではありませんが、他の人が使用しているライブラリにある場合です。
しかし、プロパティの場合は、自動実装{ get; set; }
をカスタム実装{ get { /* do stuff and return value */ } set { /* do stuff */ } }
のプロパティに変更するだけでした。クラスの外からは何も変わっていないように見え、何も壊さなかった。
したがって、あなたがフィールドを作成しようとしている場合、99.99%の時間public
あなたはそのためにプロパティを使用する方が良いでしょう。
一方、論理がないprivate
プロパティがある場合、getterメソッドとsetterメソッドは私たちに利益をもたらしません。コストはかかりませんが、無意味です。だから代わりにフィールドを使うだけです。私たちが将来私有財産を使う必要がなくなり、再コンパイルしなければならない唯一のコードが問題のクラスだけであり、それをどうにか再コンパイルしていたからです。
ほとんどすべてのフィールドがprivate
で、カスタムロジックを持たないほとんどすべてのプロパティがprotected
またはpublic
の場合があります。
*それともprivate
またはinternal
クラスだと私たちは愚かな何かにそれを設定していない外部から約束するが、それはあなたができる場合は、それらを作るよりも、約束を強制する方が良いでしょう。
からmockableとテスト可能な方法でそれを書くためだけの習慣であります"クラスメンバ"または "プロパティ"(ただし、プロパティもメンバです)、それらを静的メンバおよびインスタンスメンバにグループ化するのがより一般的です。通常は実際の実装をカプセル化したいので、アクセス時に発生するバウンドロジックを持たないフィールドは通常プライベートですが、書き込みアクセス権(書き込み対象者)とバウンドロジック(書き込み)はより一般的に公開されています。型の公開面を制御し、実際の実装を非表示にしたいとします。 –
フィールドをプライベートまたはプロパティとしてパブリックとして使用するように強制するものはありませんが、通常、クラスの内部使用のための変数はプライベートであり、取得/設定時にコードを実行できるようにプロパティは外部使用に使用されます。 – Gusman
このソリューションは、あなたの状況をクリアすることがあります:http://stackoverflow.com/questions/295104/what-is-the-difference-between-a-field-and-property-in-c http://softwareengineering.stackexchange .com/questions/133015/private-variable-vs-property –