C # Appeler le constructeur de la classe de base après son propre constructeur?
Comment puis-je faire appel de la classe de base constructeur après j'ai appelé ma propre constructeur?
Le problème, c'est la classe de base constructeur appelle une méthode abstraite (remplacée dans la sous-classe), qui doit accéder à une variable x
initialisé dans la sous-catégorie " constructeur?
Petit exemple: code:
abstract class BaseClass
{
protected string my_string;
protected abstract void DoStuff();
public BaseClass()
{
this.DoStuff();
}
}
class SubClass : BaseClass
{
private TextBox tb;
public SubClass()
: base()
{
this.my_string = "Short sentence.";
}
protected override void DoStuff()
{
//This gets called from base class' constructor
//before sub class' constructor inits my_string
tb.Text = this.my_string;
}
}
Edit: Basée sur les réponses, il n'est évidemment pas possible. Est-il un moyen automatisé pour appeler this.DoStuff();
sur chaque objet de SubClass
une fois qu'ils sont créés? Bien sûr, je pourrais juste ajouter this.DoStuff();
après que toutes les autres lignes dans la sous-catégorie " constructeur, mais environ 100 de ces classes, il se sent stupide. Toute autre solution, ou dois-je utiliser le manuel?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas.
Aussi, en général, vous ne devez pas appeler
virtual
méthodes dans un constructeur. Voir ce réponse.En fonction de votre code et de ne pas l'exemple simple vous avez écrit, vous pouvez transmettre des valeurs comme paramètres de la base de constructeur et de la
DoStuff
méthode. Par exemple:Si il n'est pas possible avec votre code, puis l'écriture de plusieurs
DoStuff()
va faire le travail. Aussi n'oubliez pas de sceller votreSubClass
classe ainsi personne ne sera en mesure d'introduire des bugs en modifiant laDoStuff
méthode d'un autre temps.Je ne voudrais pas appeler une méthode abstraite dans le constructeur, car il peut arriver que le constructeur de l'instance qui invoque la méthode n'a pas exécuté
Lorsqu'une méthode virtuelle est appelée, le type réel qui exécute la méthode n'est pas sélectionnée jusqu'à l'exécution. Quand un constructeur appelle une méthode virtuelle, il est possible que le constructeur de l'instance qui invoque la méthode n'a pas exécuté.
Pour corriger une violation de cette règle, ne pas appeler un type de méthodes virtuelles à partir de l'intérieur du type de constructeurs.
http://msdn.microsoft.com/en-us/library/ms182331%28v=vs.80%29.aspx
Est-il une raison pour laquelle vous ne pouvez pas construire une classe avant son constructeur fonctionne en fait? Il exige un niveau supérieur de responsabilité sur la façon dont la classe dérivée est créé et n'est probablement pas une bonne pratique, mais il semble fonctionner.