【问题标题】:Overriding shorthand properties in C#覆盖 C# 中的速记属性
【发布时间】:2016-12-10 14:46:21
【问题描述】:

我的理解是,当我在 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 时,这是否仍会生成一个我将无法再访问的字段?

谢谢。

【问题讨论】:

    标签: c# properties cil accessor mutators


    【解决方案1】:

    是的,该字段将仍然生成,因为您的Hello仍然需要单独使用。

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

    如果您从一开始就没有打算让Hello 类单独使用,请将类设置为abstract 属性。则不会生成任何字段。

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

    【讨论】:

    • 我相信这是真的。
    • @Tony 我添加了一个链接,表明这绝对是真的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    相关资源
    最近更新 更多