Frage

Compilerfehler     Stichwort ‚this‘ ist im aktuellen Kontext nicht verfügbar

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) { }
}

Warum ist dieser Fehler? Als Lösung dachte ich an einen parameter geschützt Ctor in A Bereitstellung () und haben

class B : A
{
     public B() : base()   // inherit the new A() ctor
     {
          base.cb = new CallBack(this.f); //this is allowed here
     }
     //...
}
War es hilfreich?

Lösung

Es ist, weil „dieser“ wird noch nicht erstellt, bis der Basisklassenkonstruktor ausgeführt wird. In Ihrem zweiten Beispiel hat der Basiskonstruktor abgeschlossen, und jetzt „diese“ Bedeutung hat.

Andere Tipps

Im ersten Beispiel der B-Instanz ist noch nicht initialisiert. In der zweiten ist es.

Da das Objekt noch nicht (vollständig) konstruiert, das ist der Basiskonstruktor wurde noch nicht ausgeführt, this ist es nicht verfügbar ist.

Sie sollten eine abstrakte / virtual-Methode verwenden.

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

    abstract void Initialize() { }
}

class B : A {
    string Text;

    B() { }

    override void Initialize() {
        this.Text = "Hello world";
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top