2010-04-12 3 views
3

Как абстрактный класс не может быть создан, почему конструктор все еще разрешен внутри абстрактного класса?Абстрактный класс и конструктор

public abstract class SomeClass 
{ 
    private string _label; 

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

Возможный дубликат http://stackoverflow.com/questions/1682275/whats-the-utility-of-public-constructors-in-abstract-classes-in-c/1682284#1682284 –

+1

Не дублируется - это спрашивает, что использование публичного конструктора, это спрашивает, что использовать конструктор вообще – thecoop

ответ

11

Конструкторы любого производного класса по-прежнему должны вызывать конструктор в абстрактном классе. Если вы вообще не укажете какие-либо конструкторы, все производные классы просто должны использовать параметр без параметров, предоставленный компилятором.

Абсолютно имеет смысл иметь конструктор, но в этом случае «общедоступный» действительно эквивалентен «защищенному».

3

Потому что вы можете сделать следующее:

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

    public string GetLabel() { return _label; } 
} 

Как вы можете видеть, дочерний класс может вызывать базовый застройщик (на абстрактном классе), чтобы создать экземпляр себе.

Как сказал Джон, public действительно не нужно. Это фактически то же самое, что и protected.

Смежные вопросы