L'inizializzatore del costruttore non mi consente di utilizzare 'this'
-
03-07-2019 - |
Domanda
Errore del compilatore La parola chiave "this" non è disponibile nel contesto corrente
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) { }
}
Perché è questo errore? Come soluzione ho pensato di fornire un ctor protetto senza parametri in A () e aver
class B : A
{
public B() : base() // inherit the new A() ctor
{
base.cb = new CallBack(this.f); //this is allowed here
}
//...
}
Soluzione
È perché " questo " non è stato creato fino a quando non è stato eseguito il costruttore della classe base. Nel tuo secondo esempio il costruttore di base è terminato, e ora "questo" ha un significato.
Altri suggerimenti
Nel primo esempio l'istanza B non è ancora inizializzata. Nel secondo, lo è.
Poiché l'oggetto non è ancora (completamente) costruito, ovvero il costruttore di base non è stato ancora eseguito, this
non è disponibile lì.
Dovresti usare un metodo astratto / virtuale.
abstract class A {
A() {
this.Initialize();
}
abstract void Initialize() { }
}
class B : A {
string Text;
B() { }
override void Initialize() {
this.Text = "Hello world";
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow