Абстрактный класс и конструктор - PullRequest
3 голосов
/ 12 апреля 2010

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

public abstract class SomeClass 
 {  
     private string _label;

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

Ответы [ 2 ]

11 голосов
/ 12 апреля 2010

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

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

3 голосов
/ 12 апреля 2010

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

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

    public string GetLabel() { return _label; }
}

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

Однако, как сказал Джон, public действительно не нужно. Фактически это то же самое, что и protected.

...