Наследование с помощью конструктора базового класса с параметрами [дубликат]



этот вопрос уже есть ответ здесь:




  • Наследование ООП и конструктор по умолчанию

    3 ответы



простой код:



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 жалуется на конструктор "бар":




ошибка CS7036 нет аргументов, учитывая, что соответствует необходимости формального параметра " х " в - фу.foo (int, int)'.




что??

535   2  

2 ответов:

проблема в том, что базовый класс foo не имеет конструктора без параметров. Так что вы должны вызвать конструктор базового класса с параметрами из конструктора производного класса:

public bar(int a, int b)
    : base(a, b)
{
    c = a * b;
}

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

public bar(int a, int b) : base(a, b)
{
     c = a * b;
}

это будет инициализировать переменные foo, а затем вы можете использовать их в баре. Кроме того, чтобы избежать путаницы, я бы рекомендовал не называть параметры точно такими же, как переменные экземпляра. Попробуйте p_a или что-то вместо этого, так что вы случайно не будете обработка неправильной переменной.

Comments

    Ничего не найдено.