Qui est appelée en premier - le constructeur de base ou « autres trucs ici » ?
Réponses
Trop de publicités?La Base de constructeurs de classe appelé avant de constructeurs de classe dérivée, mais de la classe dérivée des initialiseurs d'être appelé avant de la classe de base des initialiseurs. E. g. dans le code suivant:
public class BaseClass {
private string sentenceOne = null; // A
public BaseClass() {
sentenceOne = "The quick brown fox"; // B
}
}
public class SubClass : BaseClass {
private string sentenceTwo = null; // C
public SubClass() {
sentenceTwo = "jumps over the lazy dog"; // D
}
}
L'ordre d'exécution est le suivant: C, A, B, D.
Découvrez ces 2 articles msdn:
N'essayez pas de le rappeler, essayer de l'expliquer à vous-même ce qui doit arriver. Imaginez que vous avez de la classe de base nommée Animal et une classe dérivée nommée Chien. La classe dérivée ajoute certaines fonctionnalités de la classe de base. Par conséquent, lorsque le constructeur de la classe dérivée est exécutée la classe de base de l'instance doivent être disponibles (de sorte que vous pouvez ajouter de nouvelles fonctionnalités). C'est pourquoi les constructeurs sont exécutées à partir de la base de dérivé, mais les destructeurs sont exécutées dans le sens inverse - tout d'abord la dérivée destructeurs et puis la base des destructeurs.
(C'est simplifié, mais il devrait vous aider à répondre à cette question dans l'avenir sans le besoin de mémoriser ce.)
Comme d'autres l'ont dit, le constructeur de base est appelé en premier. Toutefois, les constructeurs ne sont pas vraiment la première chose qui se passe.
Disons que vous avez des classes comme ceci:
class A {}
class B : A {}
class C : B {}
D'abord, le champ des initialiseurs seront appelés dans l'ordre de la plupart des dérivés de à moins les classes dérivées. Alors d'abord le champ des initialiseurs d' C
, alors B
, alors A
.
Les constructeurs seront ensuite appelés dans l'ordre inverse: d'Abord A
s'constructeur, alors B
, alors C
.