質問

C#では、あなたは他の言語よりも簡単な方法でゲッター/セッターを作成することができます:

public int FooBar { get; set; }

これは、あなたが直接それにアクセスするために外部のプロパティ「FooBarの」で、直接アドレス指定することはできません内部のプライベート変数を作成します。

私の質問は - どのくらいの頻度で、この虐待を見ていますか?それは多くの場合、カプセル化のベストプラクティスに違反する高いポテンシャルを持っているように思えます。誤解しないでください、私はあなたのコードベースに他の著者からそれをあなたの不快な経験を必要に応じてそれを使用すると、プロパティの読み取り専用書き込み専用タイプのため、それを部分的に変動はなく、何ですか?

の明確化:虐待の意図した定義は確かにプライベート変数が適切であるような性質を作成することでしょう。

役に立ちましたか?

解決

私はそれが(私の意見では)虐待さ見てきました。特に、開発者は、の通常の記述します:

private readonly int foo;
public int Foo
{ 
    get 
    { 
        return foo;
    }
}

彼らは時々書きます:

public int Foo { get; private set; }

はい、それは短いです。はい、クラスの外からそれは同じ外観を持っている - しかし、後者の形式は、プロパティが、同じクラスの別の場所で設定することができますように私は、同じものとしてこれらを表示しません。また、プロパティは、コンストラクタで設定されていない、とフィールドがCLRのために読み取り専用ではありません場合は警告をありませんことを意味します。これらは微妙な違いですが、ちょうどそれが簡単ですので、二番目の形式のために行くとの違いを無視することは、マイナーだ場合でも、私に虐待のように感じます。

幸いなことに、これは現在、C#6のとして入手可能である:

// Foo can only be set in the constructor, which corresponds to a direct field set
public int Foo { get; }
scroll top