我的理解是,当我在c#中创建一个速记属性时,这会转换为为它编译后创建的字段。
class Hello {
public bool Hi { set ; get ; }
}
我的问题是如果简写属性是虚拟然后被覆盖会发生什么:
class Hello {
virtual public bool Hi { set ; get ; }
}
//The class and the property can't have the same name
//class Hi : Hello {
class Bonjour : Hello {
override public bool Hi {
set { }
get { return true ; }
}
}
我完全覆盖了虚拟财产。在编译我不能再访问的类Hi时,这仍然会生成一个字段吗?
谢谢。
答案 0 :(得分:2)
是的,该字段仍然会生成,因为您的Hello
类仍然需要自己使用。
如果要从Bonjour
类访问基础字段,可以通过base.Hi
引用基础属性。
如果您从未希望Hello
类本身可以自行使用,请将类和设为属性abstract
。那时不会生成任何字段。
Here's an example编译然后反编译两种情况时会发生什么。