コンストラクターの初期化子では 'this'を使用できません
-
03-07-2019 - |
質問
コンパイラエラー キーワード「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";
}
}
所属していません StackOverflow