Pregunta

Error del compilador     La palabra clave 'this' no está disponible en el contexto actual

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

¿Por qué es este error? Como solución, pensé en proporcionar un ctor protegido sin parámetros en A () y tener

class B : A
{
     public B() : base()   // inherit the new A() ctor
     {
          base.cb = new CallBack(this.f); //this is allowed here
     }
     //...
}
¿Fue útil?

Solución

Es porque " esto " no se ha creado hasta que se haya ejecutado el constructor de la clase base. En su segundo ejemplo, el constructor base ha terminado, y ahora " esto " tiene significado.

Otros consejos

En el primer ejemplo, la instancia B aún no se ha inicializado. En el segundo, lo es.

Dado que el objeto aún no está (completamente) construido, es decir, el constructor base aún no se ejecutó, this no está disponible allí.

Debe usar un método abstracto / virtual.

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

    abstract void Initialize() { }
}

class B : A {
    string Text;

    B() { }

    override void Initialize() {
        this.Text = "Hello world";
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top