Можно ли заставить производный класс наследовать конструктор аргумента, отличный от 0? - PullRequest
2 голосов
/ 11 февраля 2011

Опираясь на мой последний вопрос , возможно ли заставить производный класс наследовать конструктор его базы? Например, если я определил два класса, как это:

class Base {
    public Base(){}
}

public Derived() {
}

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

class Base {
    public Base(int x){}
}

Можно ли построить производный класс , используя конструктор that ? Я имею в виду, не добавляя что-то вроде

public Derived() {
     public Derived(int x) : base(x) {}
}

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Нет, это не так. Вы должны явно добавить их; only default - это конструктор без параметров, вызывающий base(), который вы получите, если не добавляете никаких конструкторов. Это может быть хорошо в некоторых случаях (особенно когда на базе много конструкторов), и я представляю есть некоторые инструменты (может быть R #? Я не проверял), которые могут помочь автоматизировать это - но ничего не встроено.

2 голосов
/ 11 февраля 2011

Сортировка ...

class Base {
    protected Base() : this(default(int)) {}
    public Base(int x){}
}

public Derived() {
}

Вынудит Derived вызвать перегруженный конструктор со значением аргумента по умолчанию. Это может или не может быть то, что вы хотите случиться, хотя. Помечая конструктор по умолчанию как protected, вы не позволяете внешним вызывающим объектам создавать экземпляры с конструктором по умолчанию, но позволяете производным классам делать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...