CLR VIA C# 泛型的协变和逆变
2024-09-25 00:31:30
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("");
ArgumentException ret1= fn1("");
//ty的返回类型ArgumentException
var ty2 = ret2.GetType(); var ty1 = ret1.GetType();
//两个的实际类型都是System.ArgumentException
Console.WriteLine("ty1:"+ty1.ToString()+"\nty2:"+ty2.ToString());
Console.ReadKey();
}
}
} 原理图如下:
最新文章
- REPL环境
- Neo4j批量插入(Batch Insertion)
- 云时代的分布式数据库:阿里分布式数据库服务DRDS
- 一张图片说明MII
- Missing letters
- iPhone私有API
- list add元素覆盖之前元素问题思考
- JAVA学习第一课(初识JAVA)
- 什么是简单的分析SQL注入漏洞
- C# devExpress BandedGridView属性 备忘
- block循环饮用解决
- java课程设计——猜数游戏个人博客
- Java与算法之(6) - 八皇后问题
- 【Java框架型项目从入门到装逼】第十五节 - jdbc模糊查询实现(附带详细调试过程)
- Node.js 工具模块
- Java使用URL类下载的图片不完整
- 13、Ajax的使用
- cocos Studio使用问题
- Eclipse配置注释模板详细介绍
- cordova微信支付回调App闪退
热门文章
- LeetCode Minimum Time Difference
- LA2218 Triathlon
- bzoj 3612 [Heoi2014]平衡——整数划分(dp)
- golang动态调用方法
- windows下通过.bat运行java程序
- java使用array.copy复制数组
- 分布式缓存系统 Memcached 状态机之SET、GET命令
- 2012_p2 寻宝 (treasure.cpp/c/pas)
- kali virtualbox
- 记一次oralce 11g r2 rac安装问题