在 C# 中覆盖 shorthand 属性
Overriding shorthand properties in C#
我的理解是,当我在 c# 中创建一个 shorthand 属性 时,这将转换为编译后为其创建的字段。
class Hello {
public bool Hi { set ; get ; }
}
我的问题是如果 shorthand 属性 是虚拟的然后被覆盖会发生什么:
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 ; }
}
}
我已经完全覆盖了虚拟 属性。在编译 class Hi 我将无法再访问时,这是否仍会生成一个字段?
谢谢。
是的,该字段将 still 生成,因为您的 Hello
class still 需要可单独使用。
如果要从Bonjour
class访问底层字段,可以通过base.Hi
.
引用基属性
如果您一开始就没有打算让 Hello
class 单独使用,请将 class 和 属性 abstract
。届时将不会生成任何字段。
Here's an example 编译然后反编译这两种情况时发生的情况。
我的理解是,当我在 c# 中创建一个 shorthand 属性 时,这将转换为编译后为其创建的字段。
class Hello {
public bool Hi { set ; get ; }
}
我的问题是如果 shorthand 属性 是虚拟的然后被覆盖会发生什么:
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 ; }
}
}
我已经完全覆盖了虚拟 属性。在编译 class Hi 我将无法再访问时,这是否仍会生成一个字段?
谢谢。
是的,该字段将 still 生成,因为您的 Hello
class still 需要可单独使用。
如果要从Bonjour
class访问底层字段,可以通过base.Hi
.
如果您一开始就没有打算让 Hello
class 单独使用,请将 class 和 属性 abstract
。届时将不会生成任何字段。
Here's an example 编译然后反编译这两种情况时发生的情况。