Covariant & Contravariant Type Parameters C# with Example
Func also supports Covariant & Contravariant // Simple hierarchy of classes. public class Person { } public class Employee : Person { } class Program { static Employee FindByTitle(String title) { // This is a stub for a method that returns // an employee that has the specified title. return new Employee(); } static void Test() { // Create an instance of the delegate without using variance. Func findEmployee = FindByTitle; // The delegate expects a method to return Person, // but you can assign it a method that returns Employee. Func findPerson = FindByTitle; // You can also assign a delegate // that returns a more derived type // to a delegate that returns a less derived type. findPerson = findEmployee; } } values