プロパティは、一部のデータをカプセル化するために使用されます。プレーンフィールドを使用できます:
public string MyField
ただし、このフィールドには、クラスのすべての外部ユーザーがアクセスできます。不正な値を挿入したり、予期しない方法で値を変更したりする可能性があります。
プロパティを使用すると、データへのアクセス方法をカプセル化できます。C# には、フィールドをプロパティに変換する優れた構文があります。
string MyProperty { get; set; }
これは、自動実装プロパティと呼ばれます。必要に応じて、次のようにプロパティを拡張できます。
string _myProperty;
public string MyProperty
{
get { return _myProperty; }
set { _myProperty = value; }
}
の値を検証するコードを追加できるようになりましたsetter
。
set
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentNullException();
_myProperty = value;
}
プロパティは、getter と setter に対して異なるアクセサーを持つこともできます。
public string MyProperty { get; private set; }
このようにして、誰でも読み取ることができるが、クラス自体だけが変更できるプロパティを作成します。
に完全にカスタムの実装を追加することもできますgetter
:
public string MyProperty
{
get
{
return DateTime.Now.Second.ToString();
}
}
C# が自動実装プロパティをコンパイルすると、中間言語 (IL) が生成されます。IL にget_MyProperty
andset_MyProperty
メソッドが表示されます。というバッキング フィールドも作成します<MyProperty>k_BackingField
(通常、これは C# では無効な名前ですが、IL では有効です。この方法では、生成された型と独自のコードの間で競合が発生することはありません)。ただし、C# では公式のプロパティ構文を使用する必要があります。これにより、C# でより優れたエクスペリエンスが作成されます (たとえば、IntelliSense を使用)。
慣例により、時間がかかる操作にはプロパティを使用しないでください。