Pergunta

Error Compiler Palavra-chave 'this' não está disponível no contexto atual

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 que é esse erro? Como uma solução que eu pensei de fornecer um ctor protegidos sem parâmetros em A () e têm

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

Solução

É porque "isto" não foi criado até que o construtor da classe base foi executado. Em seu segundo exemplo, o construtor base tenha terminado, e agora "isto" tem sentido.

Outras dicas

No primeiro exemplo a instância B ainda não está inicializado. Na segunda, é.

Uma vez que o objecto ainda não é (totalmente) construído, que é o construtor base ainda não foi executado, this não está disponível ali.

Você deve usar um método abstrato / virtual.

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

    abstract void Initialize() { }
}

class B : A {
    string Text;

    B() { }

    override void Initialize() {
        this.Text = "Hello world";
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top