3 votes

Classe abstraite et constructeur

Comme une classe abstraite ne peut pas être instanciée, pourquoi un constructeur est-il encore autorisé à l'intérieur de la classe abstraite ?

public abstract class SomeClass 
 {  
     private string _label;

     public SomeClass(string label)  
     {  
         _label=label;
     }  
}

11voto

Jon Skeet Points 692016

Les constructeurs de toute classe dérivée doivent toujours appeler un constructeur de la classe abstraite. Si vous ne spécifiez aucun constructeur, toutes les classes dérivées devront simplement utiliser le constructeur sans paramètre par défaut fourni par le compilateur.

Il est tout à fait logique d'avoir un constructeur - mais "public" est en fait équivalent à "protégé" dans ce cas.

3voto

Justin Niessner Points 144953

Parce que vous pouvez toujours faire ce qui suit :

public class SomeChildClass : SomeClass
{
    public SomeChildClass(string label) : base(label){ }

    public string GetLabel() { return _label; }
}

Comme vous pouvez le voir, la classe enfant peut appeler le contructeur de base (sur la classe abstraite) pour créer une instance d'elle-même.

Comme Jon l'a dit, public n'est pas vraiment nécessaire. C'est effectivement la même chose que protected .

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