• 微软原版系统

  • 一键重装系统

  • 纯净系统

  • 在线技术客服

魔法猪系统重装大师 一键在线制作启动 U 盘 PE 系统 用一键重装的魔法拯救失去灵魂的系统
当前位置:首页 > 教程 > 电脑教程

c#中的协变与逆变

时间:2015年04月02日 15:39:36    来源:魔法猪系统重装大师官网    人气:5663
首先我们看一下msdn上关于这两个概念的说明:协变允许方法具有的派生返回类型比委托中定义的更多。逆变允许方法具有的派生参数类型比委托类型中的更少。

不知道大家看到这两句话时是怎么理解的,反正我是没有理解清楚,于是放狗查了一下,最终我的理解是:

 这些变化是在一个大的原则下进行的,即给程序所需要的范围一个更大的范围。

也许还是不清楚,来看一下小例子吧:

01 namespace ConsoleApplication1

02 {

03 class Program

04 {

05 static void Main(string[] args)

06 {

07 #region covariance test

08 Func covarianceTest1 = () => getObject();

09 Func covarianceTest2 = () => getString();

10 #endregion

11

12 #region contravariance test

13 Action contravarianceTest1 = obj => setObject(obj);

14 Action contravarianceTest2 = str => setString(str);

15 #endregion

16 }

17

18 private static object getObject() { return null; }

19 private static void setObject(object obj) { }

20

21 private static string getString() { return null; }

22 private static void setString(string str) { }

23

24 }

25

26

27 }

以Func为例,它是协变事例:covarianceTest2所需的返回类型是一个object类的,但我给它实例化后,确是一个更精确的类型string,这是好理解的。

以Action为例,它是逆变事例:contravarianceTest1所需的参数类型是一个string类的,但我给它实例化后,确是一个范围更大的类型object。

所有这些都是ms在定义这门语言时设计的,你可以把它当成一个语法记下来。 中的,协变,与,逆变,首先,我们,看一下,msdn,上,
栏目:电脑教程 阅读:1000 2023/12/27
Win7教程 更多>>
U盘教程 更多>>
Win10教程 更多>>
魔法猪学院 更多>>

Copyright © 2015-2023 魔法猪 魔法猪系统重装大师

本站发布的系统仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件。