J'ai été confondu par le mot clé code> code> en C #. Dis que j'ai du code comme celui-ci:
âclass A
{
â// member declaration....
A(int s, int t, int x)
{
â// assign the values of members
}
}
class B : A
{
// member declaration....
âB(int a, int b, int c, int d) : base(a,b,c)
{
// does the base keyword play a role in
// this constructor?
}
}
â
3 Réponses :
oui - si vous ne em> spécifiez pas Voir mon Article sur les constructeurs pour plus d'informations. P> base code> chaînes à un constructeur dans la classe de base. p>
base code> ou ceci code> (pour chaîner à un autre constructeur dans la catégorie même em> ), l'effet est comme si vous aviez une base base () code> enchaînant sur un constructeur sans paramètre dans la classe de base. Dans votre exemple, cela provoquerait une panne de compilation lorsque votre classe de base ne sera pas avoir em> un constructeur sans paramètre. P>
J'ai un doute, alors quelle est l'utilisation de base d'informer la classe code> code> de notre classe code> de classe code> via base code> mot-clé?
Vous n'en informez-vous pas, vous étendez le constructeur de base en ajoutant des fonctionnalités supplémentaires dans la classe dérivée, puis ASLO exécutant la fonctionnalité dans le constructeur de base.
@ ANT: une partie de l'initialisation d'une instance de la classe dérivée exécute les étapes d'initialisation de la classe de base. Imaginez si cela n'a pas i> le faire, mais le constructeur de A code> dans votre exemple définit certains champs - soudainement, vous essayiez d'utiliser une instance de B code> (qui est i> une instance de a code>) sans qu'il soit complètement initialisé.
Oui, cela appelle le constructeur de la classe de base. P> li>
Un constructeur dérivé toujours em> appelle un constructeur de classe de base; Si vous ne le spécifiez pas, il tentera d'appeler le paramètre constructeur sans paramètres (si l'on existe.) Cette syntaxe vous permet de passer des paramètres à un constructeur de classe de base spécifique. Notez que, dans ce cas, il n'y a pas de constructeur de classe de base public ou protégé sans paramètres, vous devez donc utiliser la syntaxe 'Base' avec les paramètres. P> LI> ol>
Un constructeur dérivé peut finir par l'appeler indirectement, via un autre constructeur de la même classe, en utilisant ceci code>.
@Jon, bon point; Vous savez-vous si cela est appliqué au niveau de la gigue / de vérification? Je sais que vous devez émettre explicitement l'appel de l'IL Constructeur de la classe de base, mais je n'ai jamais essayé d'émettre un constructeur qui n'a pas apporté l'appel.
Je pense que le manuel est assez clair sur Le mot clé de base est utilisé pour accéder aux membres de la classe de base à partir d'une classe dérivée: p>
Appelez une méthode sur la classe de base qui a été remplacée par une autre méthode. p> li>
Spécifiez quel constructeur de classe de base doit être appelé lors de la création d'instances de la classe dérivée. P> li>
ul>
blockQuote> base code>: