ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-SimpleVariance
1.A,示例(Sample) 返回顶部

SimpleVariance 示例程序演示在委托和接口中使用泛型类型时,C# 4.0 对协变和逆变的支持。 在 C# 3.0 中,泛型类型是固定的。 因此,本示例在 C# 4.0 中可正常编译,但在早期版本的 C# 中无法编译。

程序首先声明两个简单类和两个委托:

class  Animal { }
class Cat : Animal { }delegate T Func1<out T>();
delegate void Action1<in T>(T a);

然后,实现这些委托并使用这些类:

Func1<Cat> cat = () => new Cat();
Action1<Animal> act1 = (ani) => { Console.WriteLine(ani); };

再进行需要协变和逆变支持的分配:

Func1<Animal> animal = cat;
Action1<Cat> cat1 = act1;

后面这一组分配在 C# 4.0 中可以正常工作,但在早期版本的 C# 中无法工作。 第一个分配演示协变,第二个分配演示逆变。

通过新增的上下文关键字 outin,可以指定泛型类型是要传递到委托或接口方法中,还是要从委托或接口方法返回。

1.B,SimpleVariance 示例代码(Sample Code)返回顶部

1.B.1, Program.cs

// 版权所有(C) Microsoft Corporation。保留所有权利。
// 此代码的发布遵从
// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace SimpleVariance
{class Animal { }class Cat: Animal { }class Program{// 要了解新的协变和逆变代码能够为您实现的功能// 尝试从以下两行代码中添加或删除这些内容:delegate T Func1<out T>();delegate void Action1<in T>(T a);static void Main(string[] args){Func1<Cat> cat = () => new Cat();Func1<Animal> animal = cat;Action1<Animal> act1 = (ani) => { Console.WriteLine(ani); };Action1<Cat> cat1 = act1;Console.WriteLine(animal());cat1(new Cat());}}
}

View Code

1.B.2,

1.B.EXE,

SimpleVariance.Cat
SimpleVariance.Cat
请按任意键继续. . .

1.B,

1.C,下载地址(Free Download)返回顶部
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/ylbtech/p/4197323.html

ylbtech-LanguageSamples-SimpleVariance相关推荐

  1. ASP.NET中 RequiredFieldValidator(非空验证)的使用

    ylbtech-ASP.NET-Control-Validator: RequiredFieldValidator(非空验证)的使用 ASP.NET中 RequiredFieldValidator(非 ...

  2. 学术-数学:哥德巴赫猜想

    ylbtech-学术-数学:哥德巴赫猜想 哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和.但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮 ...

  3. Node.js:路由

    ylbtech-Node.js:路由 1.返回顶部 1. Node.js 路由 我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码. 因 ...

  4. Console-算法-一个偶数总能表示为两个素数之和

    ylbtech-Arithmetic:Console-算法-一个偶数总能表示为两个素数之和 1.A,Demo(案例) [程序84] 题目:一个偶数总能表示为两个素数之和. 1.程序分析: 1.B,So ...

  5. 如果你喜欢一个程序员小伙

    程序员向来是善于幽默自嘲的群体,但从某种程度上影响了咱程序员在广大女同胞心中的印象啊-- 于是写下此篇(有从别处看到的3句加进来的), 就算是为咱程序员做个广告--要是觉得有点过的程序员们,就把此文当 ...

  6. 6.1.1 验证注解的使用

    数据注解特性定义在名称空间System.ComponentModel.DataAnnotations 中(但接下来 将看到,有些特性不是定义在这个名称空间中).它们提供了服务器端验证的功能,当在模 型 ...

  7. Console-算法-冒泡排序法|倒水法

    ylbtech-Arithmetic:Console-算法-冒泡排序法|倒水法 1.A,案例 -- ================================================== ...

  8. SQL Server-流程控制 5,Goto 语句

    ylbtech-SQL Server:SQL Server-流程控制 5,Goto 语句 SQL Server 流程控制中的 Goto 语句. 1,Goto 语句 1 --============== ...

  9. JS:1.2,控制语句(if,if else,for,switch,while,do while)

    ylbtech-JS:控制语句 If 循环 JS:控制语句-If 返回顶部 If If-else If嵌套 JS:控制语句-if 返回顶部 <html xmlns="http://ww ...

最新文章

  1. PHP常用类型判断函数
  2. mysql 5.7配置多线程复制,MySQL5.7复制功能实战,基于事务的复制,多源复制和多线程复制配置...
  3. 用示波器恢复软盘里的游戏,这个程序员大神的操作太硬核了
  4. 我的世界服务器高清修复,我的世界1.7.2 skinme高清修复(optifine)兼容版 35+8大型基础包...
  5. 《微信企业号开发日志》之企业号接入
  6. HTML CSS——margin和padding的学习
  7. linux各文件夹的作用
  8. spring mvc---controller返回值
  9. MathType7新版本数学公式编辑器上线功能特性
  10. 【C语言】整人小程序
  11. WindowsServer2008R2安装中文语言包截图详细教程(附语言包下载资源)
  12. catia之车灯设计
  13. 攻防视角下的信息收集
  14. vatic标注工具安装步骤(非docker安装)以及错误解决办法
  15. 第三方支付平台:易宝支付
  16. 小菜成长记---【proxy 代理模式 ---西门庆干潘金莲——王婆做代理】
  17. Java使用POI实现导出Word文档
  18. mysql生成uui mybatis_Mybatis【配置文件】详解
  19. ramdump,QPST
  20. Android HashTable

热门文章

  1. matlab 十六进制数组,【MATLAB】MATLAB中读取二进制数据文件并加入到矩阵中
  2. 什么叫组网_5G中,啥是独立组网(SA)与非独立组网(NSA)
  3. 【收藏】Linux 运维必备的 40 个命令总结
  4. Fluid 架构创新论文被国际数据库顶会 ICDE 录用
  5. 快速搭建 Serverless 人脸识别离线服务
  6. 安卓最新系统_你的Windows电脑即将可以运行最新版安卓系统
  7. php html_entity_decode 标签没有闭合,php – strip_tags和html_entity_decode组合无法按预期工作...
  8. 友善之臂 mini2440 linux led 驱动代码,mini2440 led驱动程序
  9. php7 魔术引号,PHP魔术引号所带来的安全问题分析
  10. 数据丢包怎么修复_交换机发生网络通信故障怎么解决?