为什么 C# 对象初始值设定项有这种行为?
Why does C# object initializer has this behaviour?
为什么 C# object initializer 有这种行为?
public class ChuckNorris
{
public string Impact { get; set; }
}
public class Burnination
{
public string Impact { get; set; }
public ChuckNorris GetChuck()
{
var chuckNorris = new ChuckNorris
{
Impact = Impact // <- Why does the right hand "Impact" property here automatically refers to "Burnination.Impact" and not "chuckNorris.Impact"
};
return chuckNorris;
}
}
如上面代码中的注释所说。为什么右手 Impact 属性 指向 Burnination.Impact 而不是 Impact 属性 ChuckNorrisclass。我(开发人员)指的是基础 class 的影响 属性 是如何做出这种假设的?
基本上,=
的 RHS 上的表达式会像在任何其他上下文中一样被解析和计算。所以你可以有:
ChuckNorris chuck1 = new ChuckNorris { Impact = "foo" };
ChuckNorris chuck2 = new ChuckNorris { Impact = chuck1.Impact };
只有左侧赋值的标识符隐含地与正在创建的对象有关。
范围属于 class Burnination,因此隐式引用 "this"。
其他人已经回复了你,但请注意:
public class ChuckNorris
{
public string Kick { get; set; }
public string Punch { get; set; }
}
var cn = new ChuckNorris
{
Kick = "Dead",
Punch = Kick
};
这不编译
在 object initializer
的赋值中,您不能引用正在创建的对象的 fields/properties/methods。
为什么 C# object initializer 有这种行为?
public class ChuckNorris
{
public string Impact { get; set; }
}
public class Burnination
{
public string Impact { get; set; }
public ChuckNorris GetChuck()
{
var chuckNorris = new ChuckNorris
{
Impact = Impact // <- Why does the right hand "Impact" property here automatically refers to "Burnination.Impact" and not "chuckNorris.Impact"
};
return chuckNorris;
}
}
如上面代码中的注释所说。为什么右手 Impact 属性 指向 Burnination.Impact 而不是 Impact 属性 ChuckNorrisclass。我(开发人员)指的是基础 class 的影响 属性 是如何做出这种假设的?
基本上,=
的 RHS 上的表达式会像在任何其他上下文中一样被解析和计算。所以你可以有:
ChuckNorris chuck1 = new ChuckNorris { Impact = "foo" };
ChuckNorris chuck2 = new ChuckNorris { Impact = chuck1.Impact };
只有左侧赋值的标识符隐含地与正在创建的对象有关。
范围属于 class Burnination,因此隐式引用 "this"。
其他人已经回复了你,但请注意:
public class ChuckNorris
{
public string Kick { get; set; }
public string Punch { get; set; }
}
var cn = new ChuckNorris
{
Kick = "Dead",
Punch = Kick
};
这不编译
在 object initializer
的赋值中,您不能引用正在创建的对象的 fields/properties/methods。