Mono C#Compiler和MS C#Compiler关于Scope的区别

img*_*gen 7 c# compiler-construction mono compiler-errors visual-studio-2010

我在这里讨论与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()
   {
   }
}
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*kov 7

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

C#规范,第10.11.1节构造函数初始值设定项:

实例构造函数初始值设定项无法访问正在创建的实例.因此,在构造函数初始值设定项的参数表达式中引用它是一个编译时错误,因为参数表达式通过简单名称引用任何实例成员的编译时错误.