Mono C# 编译器和 MS C# 编译器在作用域方面的区别

本文关键字:编译器 方面 区别 作用域 MS Mono | 更新日期: 2023-09-27 18:33:59

我在这里运行在一个极端情况下,关于与 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# 编译器不允许访问派生类的方法/属性等。 怎么会这样?

Mono C# 编译器和 MS C# 编译器在作用域方面的区别

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

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

实例

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