J'ai la situation suivante ci-dessous. Ce code génère une erreur de compilation pour Test2.net contraintes génériques et héritage de l'objet compilation problème
Le type 'InheritedChild' ne peut pas être utilisé comme paramètre de type 'T' dans le type générique ou la méthode 'panelGenericIOGrid'. Il n'y a pas de conversion de référence implicite de 'InheritedChild' à 'SerializerBase'.
public class SerializerBase<T>
{
}
public class DirectChild : SerializerBase<DirectChild>
{
}
public class InheritedChild : DirectChild
{
}
public class panelGenericIOGrid<T> : UserControl
where T: SerializerBase<T>, new()
{
}
...
panelGenericIOGrid<DirectChild> test;
panelGenericIOGrid<InheritedChild> test2;
...
Je suis assez convaincu mon implentation est funadmentally mal. Je veux la situation suivante, à la fois DirectChild et InheritedChild donneront leur type appropriote à la constature SerializerBase.
Comment puis-je faire en sorte que le code fonctionne comme il le devrait? Merci!
Quelques informations sur les informations actuelles. SerializerBase dispose d'un ensemble de fonctions statiques implémentées pour se sérialiser et se désérialiser automatiquement en fonction de leur type.
DirectChild dispose d'un ensemble de chaînes qui seront stockées sur le disque et récupérées.
Inhertiedchild a tous les membres de DirectChild plus plus.
Fondamentalement, je vais avoir besoin DirectChild.Serialize (nom de fichier), et IndirectChild.Serialize (nom de fichier), où le sérialisation est membre public SerializeBase
Je pense que l'interface est la meilleure façon de procéder. Il va y avoir du code supplémentaire, mais puisque chaque méthode dans BaseSerializer est statique, ce n'est pas trop de travail supplémentaire. Merci! – greggorob64
Si chaque méthode est statique, je pense que vous devriez vraiment aller avec l'approche mixin .... L'héritage n'a pas de sens dans ce cas, car vous ne pouvez pas avoir de méthodes statiques dans une interface et vous ne pouvez pas implémenter des méthodes statiques ceux –