【发布时间】:2014-05-12 18:03:07
【问题描述】:
我在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}};
}
【问题讨论】:
-
但是你有子类型的私有设置器。它不必阻止您访问设置值吗?
-
@OleksiiAza 如果是
BasicType __compiler_generated_variable = new BasicType(); __compiler_generated_variable.subType.subTypeValue = 5; BasicType bt = __compiler_generated_variable;,它只使用subType的getter,而不是setter。 -
@hvd 不知道,谢谢你的澄清。
-
subType={subTypeValue=5}设置subType.subTypeValue而不是设置 subType 非常违反直觉。通常人们会期望foo=bar设置 foo。