在 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 需要可单独使用。

如果要从Bonjourclass访问底层字段,可以通过base.Hi.

引用基属性

如果您一开始就没有打算让 Hello class 单独使用,请将 class 属性 abstract。届时将不会生成任何字段。

Here's an example 编译然后反编译这两种情况时发生的情况。