7

关于 C# 中实例方法/属性范围的差异,我在这里遇到了一个极端情况。这是代码:

public class Base
{
   public EventHandler Click {get;set;}
   public Base(EventHandler clickHandler)
   {
      this.Click = clickHandler;
   }
}

public class Derived: Base
{
   public Derived(): base((sender, e) => Execute())
   {
   }

   private void Execute()
   {
   }
}

代码在 MonoDevelop 3.0 上编译得很好,但在 VS2010 中给出了一个错误:非静态字段、方法或属性“Base.Execute”需要对象引用基本上,归结为调用基类的派生类的构造函数的构造函数,MS的C#编译器不允许访问派生类的方法/属性等。怎么会呢?

4

1 回答 1

7

VS 编译器遵循规范。不确定在 Mono 实现中允许使用它的原因是什么。

C# 规范,第 10.11.1 节构造函数初始化器:

实例构造函数初始化程序无法访问正在创建的实例。因此,在构造函数初始化程序的参数表达式中引用 this 是编译时错误,就像参数表达式通过简单名称引用任何实例成员一样,也是编译时错误。

于 2012-05-14T05:39:59.867 回答