自動プロパティは、次の場合にのみ使用できます。
- プロパティは読み書き可能です。つまり、
get
とset
アクセサーの両方を定義します。アクセサーを 1 つだけ定義している場合は、自動プロパティを使用できません。(プロパティをクラス外のコードからは読み取り専用にし、クラス内からは読み書き可能にする場合は、自動プロパティにアクセサーを定義できることに注意してください。)private set
- セッターで検証を行う必要はありません。つまり、プロパティ タイプのすべての値が有効です。
- バッキング フィールドを直接初期化する必要はありませんが、代わりにコンストラクターからプロパティを設定します (または、フィールドに既定値をそのまま残します)。
ref
またはout
パラメータとして、バッキング フィールドを直接参照する必要はありません。特に、これSystem.Threading.Interlocked
により、フィールドでメソッドを使用できなくなります。
- フィールドの名前は重要ではありません。(シリアル化は、重要と見なされる場合があります。)
あなたの例に基づいて、読み取り専用プロパティ(セッターのないもの)を実装しています。この場合、次のようなパターンを使用しない限り、自動プロパティを使用できません。
class Example
{
public static string SomeProperty { get; private set; }
static Example()
{
SomeProperty = "some value";
}
}
ただし、ゲッターから定数値を返すだけの方がはるかに複雑ではないため、優先する必要があります。
class Example
{
public static string SomeProperty
{
get { return "some value"; }
}
}
このコードは明確で的を射ています。自動プロパティは、コードを読みやすくするためのものです。この場合、それらは実際に意図を難読化するため、ここでは使用しません。
サンプル コードのプロパティは、自動プロパティではないことに注意してください。それは単なる標準的なプロパティです。自動プロパティはゲッターとセッターを宣言しますが、実装は提供しません。