1. ホーム
  2. c#

[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?

2022-03-16 14:02:06

質問

C#のオートプロパティに初期値を与えるには?

コンストラクタを使うか、古い構文に戻すか、どちらかですね。

コンストラクタを使用する。

class Person 
{
    public Person()
    {
        Name = "Initial Name";
    }
    public string Name { get; set; }
}

通常のプロパティ構文の使用 (初期値あり)

private string name = "Initial Name";
public string Name 
{
    get 
    {
        return name;
    }
    set
    {
        name = value;
    }
}

もっといい方法はないのでしょうか?

どのように解決するのですか?

C# 5以前では、自動実装されたプロパティに初期値を与えるには、コンストラクタで行う必要があります。

C# 6.0以降では、インラインで初期値を指定することができるようになりました。構文は以下の通りです。

public int X { get; set; } = x; // C# 6 or higher

DefaultValueAttribute は、VSデザイナー(または他の消費者)が、初期値ではなく、デフォルト値を指定するために使用することを意図しています。(設計されたオブジェクトであっても、初期値はデフォルト値です)。

コンパイル時 DefaultValueAttribute は生成されたILに影響を与えないので、その値にプロパティを初期化することは読み取られません( DefaultValue属性がAutoプロパティで機能しない ).

ILに影響を与える属性の例としては ThreadStaticAttribute , CallerMemberNameAttribute , ...