質問

コンパイラエラー     キーワード「this」は現在のコンテキストでは使用できません

delegate void CallBack(int i);
class A
{
    public A(CallBack cb) { }
}
class B : A
{        
    public B() : base(new CallBack(this.f)){}

    private void f(int i) { }
}

このエラーはなぜですか? 解決策として、A()でパラメーターなしの保護されたctorを提供することを考え、

class B : A
{
     public B() : base()   // inherit the new A() ctor
     {
          base.cb = new CallBack(this.f); //this is allowed here
     }
     //...
}
役に立ちましたか?

解決

「これ」は「これ」だからです基本クラスコンストラクターが実行されるまで作成されていません。 2番目の例では、ベースコンストラクターが終了しました。意味があります。

他のヒント

最初の例では、Bインスタンスはまだ初期化されていません。第二に、そうです。

オブジェクトはまだ(完全に)構築されていないため、つまりベースコンストラクターはまだ実行されていないため、 this はそこで使用できません。

抽象/仮想メソッドを使用する必要があります。

abstract class A {
    A() {
        this.Initialize();
    }

    abstract void Initialize() { }
}

class B : A {
    string Text;

    B() { }

    override void Initialize() {
        this.Text = "Hello world";
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top