static void Main(string[] args) { Console.WriteLine("正常处理 : Action<父类> = Action<父类>"); Action <object> actObject = PrintObject; actObject("Hello World!"); Console.WriteLine("逆变处理 : Action<子类> = Action<父类>"); Action <string> actString = PrintObject; actObject("Hello World!"); TestParent p = new TestParent() { Name = "Parent", }; TestSub s = new TestSub() { Name = "Sub", }; Console.WriteLine("正常处理 : 自定义接口<父类> = 自定义接口<父类>"); IContravariantAble <TestParent> cp = new ContravariantClass <TestParent>(); cp.PrintData(p); cp.PrintData(s); Console.WriteLine("正常处理 : 自定义接口<子类> = 自定义接口<子类>"); IContravariantAble <TestSub> cs = new ContravariantClass <TestSub>(); cs.PrintData(s); Console.WriteLine("逆变处理 : 自定义接口<子类> = 自定义接口<父类>"); cs = cp; cs.PrintData(s); Console.ReadLine(); }
static void Main(string[] args) { Console.WriteLine("正常处理 : Action<父类> = Action<父类>"); Action<object> actObject = PrintObject; actObject("Hello World!"); Console.WriteLine("逆变处理 : Action<子类> = Action<父类>"); Action<string> actString = PrintObject; actObject("Hello World!"); TestParent p = new TestParent() { Name = "Parent", }; TestSub s = new TestSub() { Name = "Sub", }; Console.WriteLine("正常处理 : 自定义接口<父类> = 自定义接口<父类>"); IContravariantAble<TestParent> cp = new ContravariantClass<TestParent>(); cp.PrintData(p); cp.PrintData(s); Console.WriteLine("正常处理 : 自定义接口<子类> = 自定义接口<子类>"); IContravariantAble<TestSub> cs = new ContravariantClass<TestSub>(); cs.PrintData(s); Console.WriteLine("逆变处理 : 自定义接口<子类> = 自定义接口<父类>"); cs = cp; cs.PrintData(s); Console.ReadLine(); }