私はc#が好きですが、なぜ私はできるのですか:
public static bool Initialized { private set; get; }
またはこれ:
public static bool Initialized = false;
しかし、1行に両方が混在していない?
変数にアクセスレベルを設定するだけで(プライベートセット)、起動時にfalseに設定する必要があります。私は、その退屈なプライベート_Initialized変数を作成したくありません。これは、パブリックInitialized varのgetterによって返されます。私は自分のコードが美しいことが好きです。 (注意:変数は静的で、コンストラクターで初期化できません)。
ありがとう
C#6以降:
public static bool Initialized { private set; get; } = false;
あなたはただすることができます:
public static bool Initialized { private set; get; }
bool
値はデフォルトで常にfalseであるため、初期化する必要はありません。
これをデフォルトでtrueにする必要がある場合、またはより複雑なロジックを使用する場合は、静的コンストラクターでこれを行うか、バッキングフィールドを使用する必要があります。
「私は自分のコードが美しいことを望んでいます」-個人的に、デフォルト以外の初期化については、これはちょうど「美しい」と思います:
private static bool initialized = true;
public static bool Initialized { get { return initialized; } }
これにより、デフォルト以外への初期化が非常にわかりやすくなりますが、これは悪いことではありません。
言及した2つのコードブロックは、2つの異なるものです。
最初のブロックは 自動実装プロパティ定義 です。これは、次のような完全なプロパティ定義の構文糖衣です。
private static bool _initialized;
public static bool Initialized
{
private set
{
_initialized = value;
}
get
{
return _initialized;
}
}
コードの2番目のブロックは、 静的メンバー定義 です。上記の拡張を見ると、プライベートな静的メンバー定義が含まれていることがわかります。初期値を提供する場合は、ここで実行できます。
private static bool _initialized = false;
public static bool Initialized
{
private set
{
_initialized = value;
}
get
{
return _initialized;
}
}
使用しているインラインプロパティ定義は、最も一般的な場合にコードを少し短くするために設計されました。他に何かをしたい場合は、プロパティコードの完全な形式を使用できます。
または、まったく異なるルートをたどって静的コンストラクターを使用することもできます。 ( Coreyの答え を参照)