Código sencillo:
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 bar :
Error CS7036 No se proporciona ningún argumento que corresponda al parámetro formal requerido
xdefoo.foo(int, int).
¿Qué?
El problema es que la clase base foo no tiene un constructor sin parámetros. Entonces debe llamar al constructor de la clase base con 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, dado que está heredando de foo, debe llamar a un constructor base. Dado que definió explícitamente el constructor foo para que requiera (int, int), ahora debe pasar eso a la cadena.
public bar(int a, int b) : base(a, b) { c = a * b; }Esto inicializará primero las variables de foo y luego podrá usarlas en la barra. Además, para evitar confusiones, recomendaría no nombrar los parámetros exactamente igual que las variables de instancia. Pruebe p_a o algo así, para que no maneje accidentalmente la variable incorrecta.