Наследование с помощью конструктора базового класса с параметрами
Простой код:
class foo
{
private int a;
private int b;
public foo(int x, int y)
{
a = x;
b = y;
}
}
class bar : foo
{
private int c;
public bar(int a, int b)
{
c = a * b;
}
}
Visual Studio жалуется на конструктор "bar":
Ошибка CS7036 Нет аргументов, которые соответствуют требуемому формальному параметру 'x' 'foo.foo(int, int)'.
Что??
Ответы
Ответ 1
Проблема заключается в том, что базовый класс foo
не имеет конструктора без параметров. Поэтому вы должны вызвать конструктор базового класса с параметрами из конструктора производного класса:
public bar(int a, int b)
: base(a, b)
{
c = a * b;
}
Ответ 2
Я мог ошибаться, но я считаю, что, поскольку вы наследуете от foo, вам нужно вызвать базовый конструктор. Поскольку вы явно определили конструктор foo, требующий (int, int), теперь вам нужно передать это цепочку.
public bar(int a, int b) : base(a, b)
{
c = a * b;
}
Сначала будут инициализированы переменные foo, а затем вы можете использовать их в баре. Кроме того, чтобы избежать путаницы, я бы рекомендовал не именовать параметры точно так же, как переменные экземпляра. Попробуйте p_a или что-то вместо этого, поэтому вы случайно не будете обрабатывать неправильную переменную.