primordial abstrait méthode générique de non classe générique

de la classe de base

class Drawer
{
    public abstract void Draw<T>(T type);    
}

classe dérivée #1

class ADrawer : Drawer
{
    public override void Draw<T>(List<T> list)
    {
        foreach (var a in list)
        {
            DrawA(a);
        }
    }

    public void DrawA(Agent a)
    {
        //draw code here
    }
}

classe dérivée #2

class AnotherDrawer : Drawer
{
    public override void Draw<T>(T number)
    {
        if (number == 1)
        {
            //draw code
        }
    }
}

L'erreur est dans le #1 de la classe dérivée : "pas de méthode appropriée trouvé pour remplacer"

dois-je utiliser "virtuel" dans la classe de base ainsi que le "résumé"?

Comment dois-je définir le type de paramètre pour permettre une variété de paramètres dans les classes dérivées?

Juste une note de côté, une méthode abstraite est implicitement une méthode virtuelle de sorte que vous ne devriez jamais avoir à définir une méthode à la fois abstrait ET virtuel.
bon à savoir 🙂
Vous disposez de deux méthodes conceptuellement différentes. L'un de vos "Dessiner" les méthodes de tire une chose, et le attire beaucoup de choses. Vous ne devriez pas essayer de les faire dans la même méthode, en premier lieu; make deux méthodes: Draw<T>(T item) et DrawMany<T>(IEnumerable<T> items). Même que List<T> a Add et AddRange méthodes; de faire quelque chose pour une seule chose et faire quelque chose de beaucoup de choses sont deux opérations différentes, donc deux méthodes différentes.

OriginalL'auteur Whiplash450 | 2012-02-08