本 << c# in depth >> で、「静的自動プロパティが有用であることがわかる唯一のシナリオは、ゲッターがパブリックでセッターがプライベートであり、セッターが型初期化子内でのみ呼び出される場合」という文を読みました"。Jon skeet がここで何を提案したのかわかりません。
私の意見では、ゲッターとセッターの両方をプライベートまたはパブリックとして使用できます。
本 << c# in depth >> で、「静的自動プロパティが有用であることがわかる唯一のシナリオは、ゲッターがパブリックでセッターがプライベートであり、セッターが型初期化子内でのみ呼び出される場合」という文を読みました"。Jon skeet がここで何を提案したのかわかりません。
私の意見では、ゲッターとセッターの両方をプライベートまたはパブリックとして使用できます。
自動プロパティは、OOP の基本原則であるカプセル化を破るためです。自動プロパティでデータをカプセル化することはできません。カプセル化の役割は、オブジェクトが一貫した状態に保たれるようにすることです。次のような自動プロパティを使用している場合:
public IFoo Foo { get; set; }
セッターで値を検証するオプションはありません。プロパティを に設定することnull
は、気付かれたり禁止されたりする機会を与えることなく可能です。これはあなたが望むものかもしれませんが、おそらくインターフェースを間違って使いやすくなります. これが、前述のブログ投稿が述べている理由です。
これはアンチパターンではなく、コードの匂いです。
あなたはこのスタイルを好むべきです:
public IFoo Foo { get; private set; }
コンストラクターと一緒に参照を挿入する可能性があるためです。
public Bar(IFoo foo)
{
if (foo == null)
throw new ArgumentNullException("Foo");
this.Foo = foo;
}
これにより、クライアントがオブジェクトを正しい方法で使用しやすくなります。前述のblog-postを読むことを強くお勧めします。セッターを非公開にしておくべき理由がよく説明されています。