协变与逆变
2016-07-27 11:18
148 查看
协变:将子类泛型集合赋值给父类的泛型集合
逆变:将父类的泛型集合赋值给子类的泛型集合
class Program
{
static void Main(string[] args)
{
#region 协变
Func<decimal, employee> child = (target) => { var employee = new employee(); employee.money = 10000; return employee; };
Func<decimal, person> per = (target) => { return new employee(); };
per = child;//协变 将子类泛型集合赋值给父类的泛型集合
#endregion
#region 逆变
Action<person> parent = Contacts;
Action<employee> emp = Contacts;
emp = parent;//逆变 将父类的泛型集合赋值给子类的泛型集合
Action<object> obj = (target) => { Console.WriteLine(target.GetType().Name); };
Action<employee> epl = obj; //逆变 将父类的泛型集合赋值给子类的泛型集合
#endregion
}
static void Contacts(person per) { }
}
public class person { }
public class employee : person {
public decimal money { set; get; }
}
逆变:将父类的泛型集合赋值给子类的泛型集合
class Program
{
static void Main(string[] args)
{
#region 协变
Func<decimal, employee> child = (target) => { var employee = new employee(); employee.money = 10000; return employee; };
Func<decimal, person> per = (target) => { return new employee(); };
per = child;//协变 将子类泛型集合赋值给父类的泛型集合
#endregion
#region 逆变
Action<person> parent = Contacts;
Action<employee> emp = Contacts;
emp = parent;//逆变 将父类的泛型集合赋值给子类的泛型集合
Action<object> obj = (target) => { Console.WriteLine(target.GetType().Name); };
Action<employee> epl = obj; //逆变 将父类的泛型集合赋值给子类的泛型集合
#endregion
}
static void Contacts(person per) { }
}
public class person { }
public class employee : person {
public decimal money { set; get; }
}
相关文章推荐
- Hadoop:HDFS的设计目标
- 哈佛凌晨两点半(读书笔记)
- HDU 4027 <线段树,区间√>
- Qt:多线程中断
- 用opencv求图像的快速傅里叶变换和反变换
- EasyUI - 修改datagrid的content-type
- Linux采用sqoop定时从关系型数据库中导入hbase中
- EJB系列(三)--有状态会话Bean和无状态会话Bean
- CSRF 攻击的应对之道
- 制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a
- 使用 纯JQuery 进行 表单 验证
- 使用 纯JQuery 进行 表单 验证
- linux下tomcat下部署项目如何打包压缩备份
- Solr增量索引
- Android 属性拷贝,属性复制的工具类
- 谷歌搜索技巧简介
- android项目管理activity的类
- 区块链开发者平台-u deserved it
- error LNK2019 无法解析的外部符号
- html jq 操作