C#高级编程三十天----泛型结构,泛型方法,泛型托付
泛型结构
泛型结构和泛型类差点儿是一直的,仅仅是泛型结构没有继承的特性..NET平台提供的一个泛型结构是(可空类型)Nullablle<T>.可空类型的引入,主要是为了解决数据库语言中的数字与编程语言中的数字的差别(数据库中数字能够为空,编程语言中数字不可为空).由于Nullable<T>使用过于的繁琐,于是就引入了一种特殊的语法,使用个”?”运算符.例:
int? x1;
Nullable<int> x2;
x1和x2这两种方式定义是等价的.
非空类型能够转化为可空类型. (总是成功的且能够隐式转化).
可空类型能够转化为非空类型. 可空类型的值为null时就会抛出异常.(须要显示转化)
假设不进行显示转化,我们就能够使用”??”运算符.案例:
int? x1=GetNullableType();
int y1=x1?
?
0;
这样一来,当x1为null时,就会赋给y1一个0.
泛型方法
首先来看声明一个泛型方法的案例:
//声明一个泛型方法
public T getValue<T>(T t)
{
return t;
}
//调用泛型方法.注意:在调用泛型方法时,对反省方法的參数实例化
public int userMethod()
{
return this.getValue<int>(10);
}
//重载getValue方法
public int getValue(int i)
{
return i;
}
在调用的时候:int res=getValue<int>(3);
泛型推理:在调用泛型方法时。C#编译器足够聪明。基于传入的參数类型来判断出正确的类型。而且它同意全然省略类型规范,例如以下所看到的:
int res=getValue(3);
泛型方法中反省參数的约束:
public class Myclass
{
public void MyMethod<T>(T t) where T : IComparable<T>
{
//action
}
}
无法为类级别的泛型參数提供方法级别的约束。
案例:
public class Myclass<T>
{
public void MyMethod<X>(X x, T t)
where T : IComparable<T>
where X : IComparable<X>
{
//action
}
}
正确的做法是:
public class Myclass<T>
{
public void MyMethod<X>(X x, T t)
where X : IComparable<X>
{
//action
}
}
泛型參数虚方法的重写:子类方法必须又一次定义该方法特定的泛型參数,代码例如以下:
public class BaseClass
{
public virtual void Method<T>(T t)
{
}
}
public class Myclass:BaseClass
{
public override void Method<T>(T t)
{
}
}
同一时候子类中的泛型方法不能反复基类泛型方法的约束。案例:
public class BaseClass
{
public virtual void Method<T>(T t) where T : new()
{
}
}
public class Myclass : BaseClass
{
//正确写法
public override void Method<T>(T t)
{
}
//错误写法
//public override void Method<T>(T t)where T:new()
//{
//}
}
子类方法调用虚拟方法的基类实现:它必须指定要取代泛型基础方法类型所使用的类型实參。你能够自己显式的指定它。也能够依靠类型推理(假设可能的话)代码例如以下:
public class BaseClass
{
public virtual void Method<T>(T t) where T : new()
{
}
}
public class Myclass : BaseClass
{
public override void Method<T>(T t)where T:new ()
{
base.Method<T>(t);
base.Method(t);
}
}
泛型托付
泛型托付相同在定义时声明泛型类型(<T>)
托付封装的方法同一时候须要声明泛型类型.由于该方法的签名必须与托付的定义一致.
public delegate void GenDelegate<T>(T input);
GenDelegate<T> gd = DoWork;
private static void DoWork<T>(T input)
{
//do what you what
}
实例中定义了泛型托付GenDelegate。该托付封装的方法接受一个參数。不返回不论什么值,參数类型由泛型类型T指定。
总结一下,事实上非常easy,大不了就是给普通的类,方法。托付添加泛型类型的声明就变成了泛型类,泛型方法及泛型托付。
这样一来,泛型类型就能够用于类里面的成员,能够用于方法的參数,能够用于托付封装的方法。
C#高级编程三十天----泛型结构,泛型方法,泛型托付的更多相关文章
- C#编程(三十)----------泛型结构,泛型方法,泛型委托
泛型结构 泛型结构和泛型类几乎是一直的,只是泛型结构没有继承的特性..NET平台提供的一个泛型结构是(可空类型)Nullablle<T>.可空类型的引入,主要是为了解决数据库语言中的数字与 ...
- C++面向对象高级编程(三)基础篇
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要 一.拷贝构造 二.拷贝赋值 三.重写操作符 四.生命周期 本节主要介绍 Big Three 即析构函数,拷贝构造函数,赋值拷贝函数,前面主 ...
- C#高级编程六十六天----表达式树总结【转】
https://blog.csdn.net/shanyongxu/article/details/47257139 表达式树总结 基础 表达式树提供了一个将可执行代码转换成数据的方法.如果你要在执行代 ...
- C#高级编程六十九天----DLR简介 .在.NET中使用DLR(转载) 我也来说说Dynamic
DLR 一.近年来,在TIOBE公司每个月发布的编程语言排行榜中,C#总是能挤进前十名,而在最近十年来,C#总体上呈现上升的趋势.C#能取得这样的成绩,有很多因素,其中它在语言特性上的锐意进取让人印象 ...
- C#高级编程五十四天----Lookup类和有序字典
Lookup类 Dictionary<Tkey,TValue>仅仅为每一个键支持一个值.新类Lookup<Tkey,TValue>是.NET3.5中新增的,它类似与Dictio ...
- 【读书笔记】C#高级编程 第十九章 程序集
(一)程序集的含义 程序集是.NET用于部署和配置单元的术语. .NET应用程序包含一个或多个程序集.通常扩展名是EXE或DLL的.NET可执行程序称为程序集. 程序集是自我描述的安装单元,由一个或多 ...
- 《C#高级编程(第六版)》泛型学习笔记(一):泛型优点和特性 (转载)
原文出处:http://www.cnblogs.com/xun126/archive/2011/01/13/1933838.html 泛型是CLR 2.0的一个新特性,在CLR 1.0中,要创建一个灵 ...
- Unix环境高级编程(三)标准I/O库
标准I/O库是ISO C的标准,在很多操作系统上面都实现.Unix文件I/O函数都是针对文件描述符的,当打开一个文件的时候,返回该文件描述符用于后续的I/O操作.而对于标准I/O库,操作则是围绕流进行 ...
- 【读书笔记】C#高级编程 第二十二章 安全性
(一)身份验证和授权 安全性的两个基本支柱是身份验证和授权.身份验证是标识用户的过程,授权在验证了所标识用户是否可以访问特性资源之后进行的. 1.标识和Principal 使用标识可以验证运行应用程序 ...
随机推荐
- Nginx 介绍和安装
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...
- 解决Easyui1.3.3 IE8兼容性问题
事先声明:项目在Firefox和Chrome上完美运行,在MSIE9.MSIE10上基本没问题,但是放在MSIE8上面运行问题就出来了.登录系统后,系统页面跳动,导致系统无法使用:我使用的是Easyu ...
- 短路与&&和按位与&的区别
条件1&&条件2,短路与&&如果条件1为假则不判断条件2:而按位与&如果条件1为假仍旧判断条件2
- /var/cache/apt/archives/lock - open
问题: E: 无法获得锁 /var/cache/apt/archives/lock - open (11 资源临时不可用)E: 无法锁定下载目录o rm /var/cache/apt/archives ...
- #include <process.h>
1 _beginthread 单进程,单线程,必须干完一件事情后干另一件事情 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #incl ...
- mysql中使用正则表达式时的注意事项
mysql不支持\d元字符匹配数字 mysql不支持向前.向后查找 regexp不能和not搭配使用
- JSF简单介绍
JSF简单介绍 一. 什么是 JSF: JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架.它提供了一种以组件为中心来开发 Java Web 用户界 ...
- Android上下左右滑动,显示底层布局
转载博客地址:http://www.cnblogs.com/flyme2012/p/4106308.html 闲着没事做了一个小东西.Android的上下左右滑动,显示底层布局.可以做类似于QQ消息列 ...
- R实战读书笔记四
第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括例如以下. 一图胜千字,人们从视觉层更易获取和理解 ...
- 关于if (!cin)以及while (cin >> word)
首先注意: 1.每一个输入(输出)对象就代表一个输入(输出)流: 2.输入(输出)对象中的流状态成员标记了输入(输出)流当前的状况,当eofbit.badbit.failbit三个标记位均为0时表示流 ...