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
     }
     //...
}
È stato utile?

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
scroll top