Question

Erreur du compilateur     Le mot clé 'this' n'est pas disponible dans le contexte actuel

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

Pourquoi cette erreur? En guise de solution, j’ai pensé fournir un ctor protégé sans paramètre dans A () et

class B : A
{
     public B() : base()   // inherit the new A() ctor
     {
          base.cb = new CallBack(this.f); //this is allowed here
     }
     //...
}
Était-ce utile?

La solution

C'est parce que "cela" n'a pas été créé tant que le constructeur de la classe de base n'a pas été exécuté. Dans votre deuxième exemple, le constructeur de base est terminé, et maintenant "this" a un sens.

Autres conseils

Dans le premier exemple, l'instance B n'est pas encore initialisée. Dans le second, c’est.

Etant donné que l'objet n'est pas encore construit, le constructeur de base n'a pas encore été exécuté, this n'est pas disponible à cet emplacement.

Vous devriez utiliser une méthode abstraite / virtuelle.

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

    abstract void Initialize() { }
}

class B : A {
    string Text;

    B() { }

    override void Initialize() {
        this.Text = "Hello world";
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top