2008-11-27 7 views
10

j'ai une classe BasePage laquelle toutes les autres pages proviennent de:Comment puis-je forcer le constructeur de base à être appelé en C#?

public class BasePage 

Ce BasePage a un constructeur qui contient le code qui doit toujours fonctionner:

public BasePage() 
{ 
    // Important code here 
} 

Je veux forcer les classes dérivées d'appeler la constructeur de base, comme ceci:

public MyPage 
    : base() 
{ 
    // Page specific code here 
} 

Comment puis-je appliquer cette (de préférence au moment de la compilation)?

Répondre

24

Le constructeur de base sera toujours appelé à un certain point. Si vous appelez this(...) au lieu de base(...) alors cela appelle dans un autre constructeur dans la même classe - qui encore une fois devra soit appeler un autre constructeur frère ou un constructeur parent. Tôt ou tard, vous arriverez toujours à un constructeur qui appelle base(...) explicitement ou implicitement un constructeur sans paramètre de la classe de base. Voir this article pour plus d'informations sur le chaînage du constructeur, y compris les points d'exécution des divers bits (tels que les initialiseurs de variable).

8

Le constructeur de classe de base ne prenant aucun argument est automatiquement exécuté si vous n'appelez aucun autre constructeur de classe de base prenant des arguments explicitement.

+0

Est-ce que cela signifie que je peux supprimer la ligne contenant: base()? – tjrobinson

+0

oui, vous pouvez entièrement :) –

+0

Splendide, merci. – tjrobinson

3

Le constructeur de classe de base est toujours appelé, même si vous ne l'appelez pas explicitement. Vous n'avez donc pas besoin de faire un travail supplémentaire pour vous assurer que cela arrive.

1

L'un des constructeurs de base doit toujours être appelé, et celui par défaut est appelé lorsque le constructeur de base n'est pas explicitement indiqué.

Modifier: reformulé pour plus de clarté.

Questions connexes