7
votes

Quel est le mot clé de base dans l'initialisation du constructeur?

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?
    }
}
​


0 commentaires

3 Réponses :


6
votes

oui - base chaînes à un constructeur dans la classe de base.

si vous ne spécifiez pas base ou ceci (pour chaîner à un autre constructeur dans la catégorie même ), l'effet est comme si vous aviez une base base () 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 un constructeur sans paramètre.

Voir mon Article sur les constructeurs pour plus d'informations.


3 commentaires

J'ai un doute, alors quelle est l'utilisation de base d'informer la classe de notre classe de classe via base 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 le faire, mais le constructeur de A dans votre exemple définit certains champs - soudainement, vous essayiez d'utiliser une instance de B (qui est une instance de a ) sans qu'il soit complètement initialisé.



3
votes
  1. Oui, cela appelle le constructeur de la classe de base.

  2. Un constructeur dérivé toujours 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.


2 commentaires

Un constructeur dérivé peut finir par l'appeler indirectement, via un autre constructeur de la même classe, en utilisant ceci .


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



4
votes

Je pense que le manuel est assez clair sur base :

Le mot clé de base est utilisé pour accéder aux membres de la classe de base à partir d'une classe dérivée:

  • Appelez une méthode sur la classe de base qui a été remplacée par une autre méthode.

  • Spécifiez quel constructeur de classe de base doit être appelé lors de la création d'instances de la classe dérivée. xxx


    xxx

0 commentaires