Как добавить делегата Apple в список делегатов Fruit?

У меня есть пример программы с базовым классом Fruit и производным классом Apple .

class Testy
{
    public delegate void FruitDelegate<T>(T o) where T : Fruit;

    private List<FruitDelegate<Fruit>> fruits = new List<FruitDelegate<Fruit>>();

    public void Test()
    {
        FruitDelegate<Apple> f = new FruitDelegate<Apple>(EatFruit);

        fruits.Add(f); // Error on this line
    }

    public void EatFruit(Fruit apple) { }
}

Я хочу иметь список делегатов фруктов и иметь возможность добавлять в список делегатов более производных фруктов. Я считаю, что это имеет какое-то отношение к ковариации или контравариантности, но я не могу этого понять.

Сообщение об ошибке (без пространств имен):

The best overloaded method match for 'List<FruitDelegate<Fruit>>.Add(FruitDelegate<Fruit>)' has some invalid arguments`
7
задан Ryan Peschel 20 October 2011 в 00:34
поделиться