C#のプロパティに初期化の方法があればいいのにと思った

C#のプロパティは宣言と一緒に初期値指定することはできない。フィールドと組み合わせるか、コンストラクタで初期化するとかしないといけない。

class Person
{
    string _Name = "名無し"; // フィールドでやるか
    public string Name
    {
        get
        {
            return _Name;
        }
        set
        {
            _Name = value;
        }
    }
    public Person()
    {
        Name = "名無し"; // コンストラクタでやるか
    }
}

これまでは値をセットしたときにイベントを起こすとか、設定ファイルと連動させるときとかに使ったことがあったくらい。

もしかしたら次期バージョンではできるのかなと思って、「C# プロパティ 初期 .net framework 4.0」とかで調べてみるけど、無さそうですね。

そのかわりちょっと興味をひく記事を見つけました。

[C#]自動プロパティの必要性
[C#]自動プロパティの必要性(その2)

出水さんという方のコメント「アセンブリ公開するのがわかっていれば、もともとフィールドでは置かないですしね」

なるほど、先日からCOMを使っているので意味分かります。インターフェースにフィールドは置けないんですよね。メンバ変数みたいなのをCOMに公開したければパブリックプロパティを使う必要があります。

インターフェースに初期化データを置くというのも変な気がするので、その辺で初期化は導入されないのかもしれないですね。詳しいことは知りませんが。

投稿日: 9月 7, 2009 | カテゴリー: .NET Framework | パーマリンク 2件のコメント.

  1. DefaultValueAttributeはお望みの動作ではないのでしょうか?

    • けろろさん、コメントありがとうございます。

      調べてみたのですが、DefaultValue属性はプロパティグリッドにデフォルト値を教えるためのもので、実行時にプロパティの初期化をしてくれるものではないそうです。

      ということは、自作クラスがカスタムコントロールとかなら、フォームデザイナで配置したときにInitializeComponentの中に初期値の設定コードを自動的に追加してくれますが、デザイナと関係ないクラスの場合はこの手は使えないということになります。

      http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx#Y3992

コメントを残す