簡體   English   中英

Mono C#Compiler和MS C#Compiler關於Scope的區別

[英]The difference between Mono C# Compiler and MS C# Compiler Regarding Scope

我在這里討論與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編譯器遵循規范。 不確定在Mono實現中允許它的原因是什么。

C#規范 ,第10.11.1節構造函數初始值設定項:

實例構造函數初始值設定項無法訪問正在創建的實例。 因此,在構造函數初始值設定項的參數表達式中引用它是一個編譯時錯誤,因為參數表達式通過簡單名稱引用任何實例成員的編譯時錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM