首页 > Windows开发 > 详细

CLR VIA C# 泛型的协变和逆变

时间:2016-01-22 10:45:09      阅读:182      评论:0      收藏:0      [点我收藏+]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication6
{
class Program
{
public static ArgumentException FM(object s)
{
return new ArgumentException("aru");
}
static void Main(string[] args)
{
//逆变和协变
Func<object, ArgumentException> fn1 = FM;
Func<string, Exception> fn2 = fn1;
//里氏原则 Exception=ArgumentException 父类引用=子类对象的实例引用
Exception ret2= fn2("1");
ArgumentException ret1= fn1("1");
//ty的返回类型ArgumentException
var ty2 = ret2.GetType();

var ty1 = ret1.GetType();
//两个的实际类型都是System.ArgumentException
Console.WriteLine("ty1:"+ty1.ToString()+"\nty2:"+ty2.ToString());
Console.ReadKey();
}
}
}

原理图如下:
技术分享

 

CLR VIA C# 泛型的协变和逆变

原文:http://www.cnblogs.com/kexb/p/5150238.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!