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# 编译器不允许访问派生类的方法/属性等。 怎么会这样?
VS 编译器遵循规范。不确定在单声道实现中允许它的原因是什么。
C# 规范,第 10.11.1 节构造函数初始值设定项:
实例构造函数初始值设定项无法访问正在创建的实例。因此,在构造函数初始值设定项的参数表达式中引用它是一个编译时错误,就像参数表达式通过简单名称引用任何实例成员一样。