Herencia con el constructor de clase base con parámetros

Código simple:

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 se queja del constructor de “barra”:

Error CS7036 No se ha dado ningún argumento que corresponda al parámetro formal requerido ‘x’ de ‘foo.foo (int, int)’.

¿¿Qué??

El problema es que la clase base foo no tiene constructor sin parámetros. Por lo tanto, debe llamar al constructor de la clase base con los parámetros del constructor de la clase derivada:

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

Podría estar equivocado, pero creo que como estás heredando de foo, debes llamar a un constructor de base. Como explícitamente definiste el constructor foo para requerir (int, int) ahora debes pasar eso en la cadena.

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

Esto inicializará primero las variables de Foo y luego podrás usarlas en la barra. Además, para evitar confusiones, recomendaría no nombrar los parámetros exactamente como las variables de instancia. Prueba p_a o algo en su lugar, por lo que no manejarás accidentalmente la variable incorrecta.