博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
泛型中的协变
阅读量:6897 次
发布时间:2019-06-27

本文共 1155 字,大约阅读时间需要 3 分钟。

协变类型在分配和使用泛型类型方面提供了很大的灵活性, 例如,利用协变类型参数,可以执行非常类似于普通的多态性的分配。 假定您有一个名为 Base的基类和一个名为Sons的派生类。 多态性使您能够将 Sons的实例分配给 Base 类型的变量。 同样,由于 接口的类型参数是协变类型参数,因此可以将 IEnumerable<Sons>的实例分配给类型 IEnumerable<Base> 的变量,如下面的代码所示。

IEnumerable
d = new List
(); IEnumerable
b = d; 实事上,这正是我之前一篇文章上提到的,派生类集合可以转换为基类集合,这在.net术语中叫到泛型的转协变。 例如,在一个LINQ TO SQL的复杂查询时,你的代码可能是这样

IQueryable<UserAddress> linq1 = from data in new Repository<UserAddress>().GetModel()

                                            select new UserAddress
                                           {
                                               UserID = data.UserID,
                                               ID = data.ID,
                                               Address = data.Address,
                                           };

注意,这段代码会出错,因为LINQ不能返回自己本身的实体,所以必须为返回它的派生类型   IQueryable
linq1 = from data in new Repository
().GetModel()                                             select new UserAddress_Ext                                              {
                                                 UserID = data.UserID,                                                  ID = data.ID,                                                  Address = data.Address,                                              }; 这种写法是没有问题的,呵呵,这其实就叫做泛型的协变

转载于:https://www.cnblogs.com/lori/archive/2011/12/18/2292719.html

你可能感兴趣的文章
Flash xml 中文乱码
查看>>
BZOJ 2727 双十字(树状数组)
查看>>
8.2 C++ AMP advanced concepts
查看>>
Linux Mint 11正式版发布!
查看>>
C++开发者快速学习Objective-C语言核“.NET研究”心语法
查看>>
(总结)Nginx使用的php-fpm的两种进程管理方式及优化
查看>>
我的KT库之----数据库的操作(DbHelper)
查看>>
js Grid - 列表插件
查看>>
20个优秀的固定位置网站菜单设计案例
查看>>
php函数serialize()与unserialize()
查看>>
批处理 Telnet 星球大战 话说我也清楚这是什么东东
查看>>
myeclipse jsp和java字体设置
查看>>
使用c#,WPF,模仿IPhone的Loading(加载)效果
查看>>
真正无错的javascript的replaceAll函数 [转]
查看>>
AT指令(中文详解版)(三)
查看>>
如何开启默认共享?
查看>>
动态参数的存储过程示例.sql
查看>>
关于C++中enum的探讨[zz]
查看>>
TYAN_S8230做硬Raid
查看>>
AutoResetEvent 的诡异行为
查看>>