博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
泛型委托和泛型接口的逆变协变类型参数
阅读量:5879 次
发布时间:2019-06-19

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

hot3.png

.NET4.0为泛型接口和委托引入了新内容,逆变和协变类型参数。利用这个功能可将泛型委托和接口的一个变量转型为同一个泛型类型的另一个变量(后者的泛型类型实参不同)。

逆变量:说明泛型类型参数可以从一个基类更改为该类的派生类。在C#中用in关键字标记。用作方法的参数。

协变量:说明泛型类型参数可以从一个派生类更改为它的基类。在C#中用out关键字标记。用作方法的返回值。

下面用代码说明它的用法:(代码只用作说明用法)

interface Icomparable
//T为逆变量  Tout为协变量    {        Int32 CompareTo(T i);//逆变类型实参用作方法的参数        Tout Exception();//协变类型实参用作返回值类型    }    class point : Icomparable
继承逆变类型实参为object协变类型实参为NullReferenceException的泛型接口    {        private Int32 m_x;        private Int32 m_y;        public point(Int32 x, Int32 y)        {            m_x = x;            m_y = y;        }      ///实现接口方法        public Int32 CompareTo(object i)        {            return Math.Sign(Math.Sqrt(m_x * m_x + m_y * m_y) - Math.Sqrt(((point)i).m_x * ((point)i).m_x + ((point)i).m_y * ((point)i).m_y));        }        ///实现接口方法        public NullReferenceException Exception()        {            NullReferenceException e=null;            return e;        }    }    class Program    {                static void Main(string[] args)        {            Icomparable
 a = new point(1,2);接口变量应用类型point的一个实例            Icomparable
 b = a;//由于使用了协变类型实参和逆变类型实参,所以这条语句执行成功。            //如果类型参数没有用in 标识为逆变量则上面语句报错。            错误 1 无法将类型“接口.Icomparable
”隐式转换为“接口.Icomparable
”。存在一个显式转换(是否缺少强制转换?) C:\Users\Administrator\documents\visual studio 2013\Projects\接口\接口\Program.cs 45 47 接口                                    //如果类型参数没有用out标识为协变量则上面语句同样报错。            错误 1 无法将类型“接口.Icomparable
”隐式转换为“接口.Icomparable
”。存在一个显式转换(是否缺少强制转换?) C:\Users\Administrator\documents\visual studio 2013\Projects\接口\接口\Program.cs 45 47 接口            Console.Read();        }    }

转载于:https://my.oschina.net/u/1460821/blog/212390

你可能感兴趣的文章
ubuntu Unable to locate package sysv-rc-conf
查看>>
笔记:认识.NET平台
查看>>
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
【吉光片羽】短信验证
查看>>
MacBook如何用Parallels Desktop安装windows7/8
查看>>
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
struts中的xwork源码下载地址
查看>>
ABP理论学习之仓储
查看>>
我的友情链接
查看>>
Tengine新增nginx upstream模块的使用
查看>>
CentOS图形界面和命令行切换
查看>>
HTML5通信机制与html5地理信息定位(gps)
查看>>
Mind_Manager_2
查看>>
手动升级 Confluence - 规划你的升级
查看>>
汽车常识全面介绍 - 悬挂系统
查看>>
电子政务方向:We7.Cloud政府云门户
查看>>
ansible 基本操作(初试)
查看>>