120 votes

Constructeur de base en c# - qui est appelée en premier ?

Qui est appelée en premier - le constructeur de base ou « autres trucs ici » ?

143voto

Sam Meldrum Points 7405

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:

109voto

craigb Points 10622

Le constructeur de base s’appellera tout d’abord.

Essaie :

37voto

David Pokluda Points 4284

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.)

22voto

Paolo Tedesco Points 22442

En fait, le constructeur de classe dérivée est exécuté en premier, mais le compilateur c# insère un appel au constructeur de classe de base comme première instruction du constructeur dérivée.

Donc : la dérivée est exécutée en premier, mais il « ressemble à » la base a été exécuté en premier.

6voto

Joel B Fant Points 14013

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 As'constructeur, alors B, alors C.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X