J'ai cette classe générique Ceci est un échantillon: p> foo code> avec deux constructeurs. L'un d'entre eux accepte le nombre variable de paramètres à l'aide des paramètres code> code>. L'autre classe NONGENERIC BAR CODE> est dérivé de FOO code>. Le problème est que bar code> n'accepte pas l'instanciation avec constructeur qui a parames code>. using System;
namespace ConsoleApp1
{
class Foo<T> where T : IComparable<T>
{
private Foo() { }
public Foo(params T[] list) : this() { }
}
class Bar : Foo<int> { }
class Program
{
static void Main(string[] args)
{
Foo<int> foo = new Foo<int>(1, 2); // it compiles
Bar bar = new Bar(1, 2); // but CS1729 here!
}
}
}
3 Réponses :
Vous manquez d'implémenter ce constructeur à partir de FOO code> in bar code>:
Cela n'a rien à voir avec les génériques. C'est juste que les constructeurs ne sont pas, par défaut, hérité des classes d'enfants. Le fait que Tous les membres d'une classe de base sont hérités par des classes dérivées. Les membres suivants ne sont pas hérités: P>
foo parames int [] code> constructeur ne signifie pas automatiquement bar code> l'a aussi:
Les constructeurs ne sont pas hérités dans C #. Si vous ne spécifiez pas de constructeur, le compilateur générera un constructeur sans paramètre pour vous, qui appelle le constructeur sans paramètre de la classe de base. Si votre classe dérive d'une classe de base qui n'a pas de constructeurs sans paramètres non privés, les erreurs de compilateur.
Votre plan d'obtenir Il s'avère que ce qui se passe ici est que le compilateur a réalisé qu'il peut générer un constructeur sans paramètre qui appelle le Base Dans votre cas, vous devez Donnez bar code> pour hériter du foo code > constructeur qui prend un paramètre t [] code> ne fonctionnera jamais. p> FOO (paramètres t []) code> constructeur en passant un tableau vide. Voir ici . p> bar code> son propre constructeur: p>