Constructor initializer erlaubt mir nicht, ‚dies‘ zu verwenden,
-
03-07-2019 - |
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
}
//...
}
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