using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace demo3
{
class Program
{
static void Main(string[] args)
{
//协变看返回类型,允许返回子类,如委托返回类型是Animal,方法的类型可以允许返回Person
Test.sayDeltegate t1= new Test.sayDeltegate(Test.say); //协变
Test.sayDeltegate t2 = new Test.sayDeltegate(Test.say1);//协变
//逆变看参数,允许父类当作子类使用,如委托的签名是(Person per),那么方法可以是(Animal a)
Test.sayWhatDeltegate t3 = Test.saywhat;//逆变
}
}
public class Animal {
}
public class Person : Animal {
}
public class Test
{
public delegate Animal sayDeltegate();
public delegate string sayWhatDeltegate(Person a);
public static Animal say()
{
return null;
}
public static Person say1()
{
return null;
}
public static string saywhat(Animal animal)
{
return null;
}
}
}