覆盖C#

时间:2016-12-10 14:46:22

标签: c# properties cil accessor mutators

我的理解是,当我在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时,这仍然会生成一个字段吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

是的,该字段仍然会生成,因为您的Hello仍然需要自己使用。

如果要从Bonjour类访问基础字段,可以通过base.Hi引用基础属性。

如果您从未希望Hello类本身可以自行使用,请将类设为属性abstract。那时不会生成任何字段。

Here's an example编译然后反编译两种情况时会发生什么。