Construtor initializer não me permite usar 'this'
-
03-07-2019 - |
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
}
//...
}
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