ylbtech-LanguageSamples-SimpleVariance
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# 中无法工作。 第一个分配演示协变,第二个分配演示逆变。
通过新增的上下文关键字 out 和 in,可以指定泛型类型是要传递到委托或接口方法中,还是要从委托或接口方法返回。
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相关推荐
- ASP.NET中 RequiredFieldValidator(非空验证)的使用
ylbtech-ASP.NET-Control-Validator: RequiredFieldValidator(非空验证)的使用 ASP.NET中 RequiredFieldValidator(非 ...
- 学术-数学:哥德巴赫猜想
ylbtech-学术-数学:哥德巴赫猜想 哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和.但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮 ...
- Node.js:路由
ylbtech-Node.js:路由 1.返回顶部 1. Node.js 路由 我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码. 因 ...
- Console-算法-一个偶数总能表示为两个素数之和
ylbtech-Arithmetic:Console-算法-一个偶数总能表示为两个素数之和 1.A,Demo(案例) [程序84] 题目:一个偶数总能表示为两个素数之和. 1.程序分析: 1.B,So ...
- 如果你喜欢一个程序员小伙
程序员向来是善于幽默自嘲的群体,但从某种程度上影响了咱程序员在广大女同胞心中的印象啊-- 于是写下此篇(有从别处看到的3句加进来的), 就算是为咱程序员做个广告--要是觉得有点过的程序员们,就把此文当 ...
- 6.1.1 验证注解的使用
数据注解特性定义在名称空间System.ComponentModel.DataAnnotations 中(但接下来 将看到,有些特性不是定义在这个名称空间中).它们提供了服务器端验证的功能,当在模 型 ...
- Console-算法-冒泡排序法|倒水法
ylbtech-Arithmetic:Console-算法-冒泡排序法|倒水法 1.A,案例 -- ================================================== ...
- SQL Server-流程控制 5,Goto 语句
ylbtech-SQL Server:SQL Server-流程控制 5,Goto 语句 SQL Server 流程控制中的 Goto 语句. 1,Goto 语句 1 --============== ...
- 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 ...
最新文章
- PHP常用类型判断函数
- mysql 5.7配置多线程复制,MySQL5.7复制功能实战,基于事务的复制,多源复制和多线程复制配置...
- 用示波器恢复软盘里的游戏,这个程序员大神的操作太硬核了
- 我的世界服务器高清修复,我的世界1.7.2 skinme高清修复(optifine)兼容版 35+8大型基础包...
- 《微信企业号开发日志》之企业号接入
- HTML CSS——margin和padding的学习
- linux各文件夹的作用
- spring mvc---controller返回值
- MathType7新版本数学公式编辑器上线功能特性
- 【C语言】整人小程序
- WindowsServer2008R2安装中文语言包截图详细教程(附语言包下载资源)
- catia之车灯设计
- 攻防视角下的信息收集
- vatic标注工具安装步骤(非docker安装)以及错误解决办法
- 第三方支付平台:易宝支付
- 小菜成长记---【proxy 代理模式 ---西门庆干潘金莲——王婆做代理】
- Java使用POI实现导出Word文档
- mysql生成uui mybatis_Mybatis【配置文件】详解
- ramdump,QPST
- Android HashTable
热门文章
- matlab 十六进制数组,【MATLAB】MATLAB中读取二进制数据文件并加入到矩阵中
- 什么叫组网_5G中,啥是独立组网(SA)与非独立组网(NSA)
- 【收藏】Linux 运维必备的 40 个命令总结
- Fluid 架构创新论文被国际数据库顶会 ICDE 录用
- 快速搭建 Serverless 人脸识别离线服务
- 安卓最新系统_你的Windows电脑即将可以运行最新版安卓系统
- php html_entity_decode 标签没有闭合,php – strip_tags和html_entity_decode组合无法按预期工作...
- 友善之臂 mini2440 linux led 驱动代码,mini2440 led驱动程序
- php7 魔术引号,PHP魔术引号所带来的安全问题分析
- 数据丢包怎么修复_交换机发生网络通信故障怎么解决?