1

MSDN:Object and Collection Initializersでこれについての説明は見当たりませんでした。具体的には、サブタイプ自体を新しくするのではなく、オブジェクト初期化子を使用してサブタイプのプロパティを設定できることに注意しました。

構文自体は、MSDN ページに関する私の理解と一致しません。オブジェクト初期化子を使用して初期化されたオブジェクトのフィールドを設定できることは理解していますが、フィールドのフィールドを設定できることが文書化されている場所がわかりません。

これが合法であることは私には理にかなっています。で同じことを達成できbt.subType.subTypeValue=5;ます。

class BasicSubType
{
    public int subTypeValue;
}

class BasicType
{
    public BasicSubType subType {get;private set;}
    public BasicType()
    {
        subType = new BasicSubType();
    }
}

void Main()
{
    BasicType bt = new BasicType{subType={subTypeValue=5}};
}
4

1 に答える 1

2

ユーザードキュメントのどこにあるのかわかりませんが、オブジェクト初期化子に関するセクションの言語仕様で具体的に対処されています。

等号の後にオブジェクト初期化子を指定するメンバー初期化子は、ネストされたオブジェクト初期化子、つまり埋め込みオブジェクトの初期化です。フィールドまたはプロパティに新しい値を割り当てる代わりに、ネストされたオブジェクト初期化子での割り当ては、フィールドまたはプロパティのメンバーへの割り当てとして扱われます。ネストされたオブジェクト初期化子は、値の型を持つプロパティ、または値の型を持つ読み取り専用フィールドには適用できません。

このテキストは、Overview of C# 3.0 の一部でもあります。

于 2014-05-12T18:15:50.477 に答える