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コンパイラは仕様に従います。モノラル実装で許可されている理由がわかりません。

C#仕様、セクション10.11.1コンストラクタ初期化子:

インスタンスコンストラクタ初期化子は、作成中のインスタンスにアクセスできません。したがって、コンストラクタ初期化子の引数式でこれを参照するのはコンパイル時エラーであり、単純な名前を介して任意のインスタンスメンバーを参照する引数式のコンパイル時エラーでもあります。

于 2012-05-14T05:39:59.867 に答える