Подтвердить что ты не робот

Можно ли переопределить конструктор в С#?

Можно ли переопределить конструктор базового класса в производном классе?

Если да, то как это можно сделать и в каком случае это будет практичным? Если нет, почему бы и нет?

4b9b3361

Ответ 1

Нет, вы не можете переопределить конструкторы. Концепция не имеет смысла в С#, потому что конструкторы просто не вызываются полиморфно. Вы всегда указываете, какой класс вы пытаетесь построить, и аргументы конструктору.

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

Ответ 2

Нет, конструкторы не наследуются. Вы не можете переопределить их в производном классе.
Причина

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

Ответ 3

Нет, вы не можете переопределить конструктор.

Если вы посмотрите на основной синтаксис конструктора, он должен иметь то же имя, что и класс, для которого вы его пишете.

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

Ответ 4

Я попал в аналогичную проблему, и я обнаружил, что это можно сделать.

public class A
{
 public A(string parameter)
 {
  // constructor goes here
 }
}

public class B:A
{
 public B(string myParameter):base(myParameter)
 {
 // constructor goes here
 }
}