2010-04-12 8 views
3

Étant donné qu'une classe abstraite ne peut pas être instanciée, pourquoi un constructeur est-il toujours autorisé à l'intérieur de la classe abstraite?Classe abstraite et constructeur

public abstract class SomeClass 
{ 
    private string _label; 

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

Copie possible de http://stackoverflow.com/questions/1682275/whats-the-utility-of-public-constructors-in-abstract-classes-in-c/1682284#1682284 –

+1

Ne pas dupliquer - cela demande quoi l'utilisation d'un constructeur public est, cela demande à quoi sert un constructeur du tout – thecoop

Répondre

11

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

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

3

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 la contructor de base (sur la classe abstraite) pour créer une instance de lui-même. Comme Jon a dit cependant, public n'est vraiment pas nécessaire. C'est effectivement le même que protected.

Questions connexes