C# Erreur: Parent ne contient pas un constructeur qui prend 0 arguments
Mon code est
public class Parent
{
public Parent(int i)
{
Console.WriteLine("parent");
}
}
public class Child : Parent
{
public Child(int i)
{
Console.WriteLine("child");
}
}
J'obtiens l'erreur:
Parent ne contient pas un constructeur qui prend 0 arguments.
Je comprends le problème, c'est que Parent
n'a pas de 0 constructeur avec arguments. Mais ma question est, pourquoi avons-nous besoin d'un constructeur avec arguments zéro? Pourquoi ne pas le code de fonctionner sans elle?
- J'ai eu le même message d'erreur pour une autre raison, lors de l'extension d'une classe abstraite, avec un intérieur de constructeur à partir d'une autre assemblée. C'est actuellement le cas pour TypeInfo, FieldInfo, ... dans DotNetCore. Je voulais juste partager cette connaissance qu'il m'a fallu des heures pour résoudre le problème.
Vous devez vous connecter pour publier un commentaire.
Puisque vous n'avez pas appeler explicitement un constructeur parent dans le cadre de votre enfant le constructeur de la classe, il y a un appel implicite à un sans paramètre constructeur parent inséré. Que le constructeur n'existe pas, et si vous obtenez cette erreur.
Pour corriger la situation, vous devez ajouter un appel explicite:
Ou, vous pouvez simplement ajouter un sans paramètre constructeur parent:
protected parent() { }
au lieu depublic
.protected
est le sensible, modificateur, depuis que a la sémantique exacte de "seulement accessible à des enfants de classes".Vous avez besoin de changer votre enfant constructeur:
Vous receviez le message d'erreur parce que votre parent constructeur de la classe prend un paramètre, mais vous n'êtes pas passer ce paramètre à partir de l'enfant de la mère.
Les constructeurs ne sont pas héréditaire en C#, vous avez de la chaîne manuellement.
Vous avez besoin de modifier le constructeur de la
child
classe ce:La partie
: base(i)
signifie que le constructeur de la classe de base avec unint
paramètre doit être utilisé. Si cela est manquant, vous êtes implicitement dire au compilateur d'utiliser le constructeur par défaut sans paramètre. Parce qu'aucune constructeur existe dans la classe de base c'est de vous donner cette erreur.Le compilateur ne peut pas deviner ce qui devrait être adoptée pour le constructeur de base de l'argument. Vous devez le faire de manière explicite:
Vous pouvez utiliser un constructeur sans paramètres dans votre classe Parent :
Par défaut du compilateur essaie de l'appeler constructeur sans paramètre de la classe de base.
Dans le cas où si la classe de base ne possède pas de constructeur sans paramètre, vous devez explicitement appeler vous-même:
Ref : Constructeur de l'appel de la hiérarchie au cours de l'héritage