Errore C #: il genitore non contiene un costruttore che accetta 0 argomenti

Il mio codice è

public class Parent { public Parent(int i) { Console.WriteLine("parent"); } } public class Child : Parent { public Child(int i) { Console.WriteLine("child"); } } 

Sto ottenendo l’errore:

Il genitore non contiene un costruttore che accetta 0 argomenti.

Capisco il problema è che il Parent non ha costruttore con 0 argomenti. Ma la mia domanda è, perché abbiamo bisogno di un costruttore con argomenti zero? Perché il codice non funziona senza di esso?

    Dal momento che non si richiama esplicitamente un costruttore genitore come parte del costruttore della class figlio, esiste una chiamata implicita a un costruttore genitore senza parametri inserito. Quel costruttore non esiste, e quindi ottieni questo errore.

    Per correggere la situazione, è necessario aggiungere una chiamata esplicita:

     public Child(int i) : base(i) { Console.WriteLine("child"); } 

    Oppure, puoi semplicemente aggiungere un costruttore genitore senza parametri:

     protected Parent() { } 

    Devi cambiare il costruttore del tuo bambino per:

     public child(int i) : base(i) { // etc... } 

    Stavi ricevendo l’errore perché il costruttore della tua class genitrice accetta un parametro ma non lo passa passando dal figlio al genitore.

    I costruttori non sono ereditati in C #, devi concatenarli manualmente.

    Devi cambiare il costruttore della class child con questo:

     public child(int i) : base(i) { Console.WriteLine("child"); } 

    La parte : base(i) significa che deve essere utilizzato il costruttore della class base con un parametro int . Se questo è mancante, stai implicitamente dicendo al compilatore di usare il costruttore predefinito senza parametri. Perché non esiste un tale costruttore nella class base che ti sta dando questo errore.

    Il compilatore non può indovinare cosa deve essere passato per l’argomento del costruttore di base. Devi farlo esplicitamente:

     public class child : parent { public child(int i) : base(i) { Console.WriteLine("child"); } } 

    Puoi utilizzare un costruttore senza parametri nella class Parent:

     public parent() { } 

    Di default il compilatore prova a chiamare il costruttore senza parametri della class base.

    Nel caso in cui la class base non abbia un costruttore senza parametri, devi chiamarla esplicitamente:

     public child(int i) : base(i){ Console.WriteLine("child");} 

    Rif: Costruttore che chiama la gerarchia durante l’ereditarietà