Можно ли переопределить конструктор базового класса в производном классе?
Если да, то как это можно сделать и в каком случае это будет практичным? Если нет, почему бы и нет?
Можно ли переопределить конструктор базового класса в производном классе?
Если да, то как это можно сделать и в каком случае это будет практичным? Если нет, почему бы и нет?
Нет, вы не можете переопределить конструкторы. Концепция не имеет смысла в С#, потому что конструкторы просто не вызываются полиморфно. Вы всегда указываете, какой класс вы пытаетесь построить, и аргументы конструктору.
Конструкторы вообще не наследуются, но все конструкторы из производного класса должны быть привязаны либо к другому конструктору в том же классе, либо к одному из конструкторов базового класса. Если вы не делаете этого явно, компилятор неявно соединяется с безразмерным конструктором базового класса (и возникает ошибка, если этот конструктор не существует или недоступен).
Нет, конструкторы не наследуются. Вы не можете переопределить их в производном классе.
Причина
Базовый конструктор всегда будет вызываться, для каждый класс, который сходит с объекта, потому что каждый класс должен иметь по крайней мере, один конструктор, который вызывает конструктор base() (явно или неявно), и каждый вызов этого конструктора() должен в конечном счете вызовите конструктор base().
Нет, вы не можете переопределить конструктор.
Если вы посмотрите на основной синтаксис конструктора, он должен иметь то же имя, что и класс, для которого вы его пишете.
Предположим, вы пишете метод с тем же именем, что и базовый класс (тот же, что и у базового класса), он просто станет новым методом в производном классе без указанного типа возврата, который является синтаксически неправильным.
Я попал в аналогичную проблему, и я обнаружил, что это можно сделать.
public class A
{
public A(string parameter)
{
// constructor goes here
}
}
public class B:A
{
public B(string myParameter):base(myParameter)
{
// constructor goes here
}
}