web-dev-qa-db-ja.com

公開読み取り専用フィールドと取得専用プロパティ

読み取り専用のパブリックフィールドが必要な場合がありますか。取得専用の自動実装プロパティ?

public class Foo
{
    public readonly string Hello;

    public string Hello2 { get; }
}

どちらもコンストラクタの間にのみ設定でき、クラスの外では読み取り専用アクセスを提供します。少し疲れているので、何かが足りない可能性があります。

26
Alex KeySmith

1つの理由は、データバインディングのためです。netはプロパティへのバインディングを実装しますが、パブリックフィールドへのバインディングは実装しません。

ここでの議論: C#でデータバインディングにパブリックフィールドを使用できないのはなぜですか?

11
PaulF

フィールドではなくプロパティにすることは、インターフェイスで使用できることを意味します。

正確な実装(自動プロパティは実際にはあまり実装されていませんが...)も抽象化されているため、将来的には、互換性を壊す(コンパイルする)ことなく、フィールドの組み合わせに基づいて実装できます。

24