C#协变和反变类型参数

示例

Func 还支持协变和逆变

// 类的简单层次结构。
public class Person { }
public class Employee : Person { }

class Program
{
    static Employee FindByTitle(String title)
    {
        // 这是返回的方法的存根
        // 具有指定头衔的员工。
        return new Employee();
    }

    static void Test()
    {
        // 在不使用方差的情况下创建委托的实例。
        Func<String, Employee> findEmployee = FindByTitle;

        // 委托希望有一个方法可以返回Person,
        // 但是您可以为其分配一个返回Employee的方法。
        Func<String, Person> findPerson = FindByTitle;

        // 您还可以分配代表 
        // 返回更多派生类型 
        // 返回返回派生类型较少的委托。
        findPerson = findEmployee;

    }
}