C#入门经典学习12-泛型2
来源:互联网 发布:邓肯数据不怎样 编辑:程序博客网 时间:2024/06/11 01:41
定义泛型
class MyClass<T1,T2,T3>
{
}
可以把它们用作字段的类型,属性的类型,方法的返回值以及参数类型。
不能假定他是什么类型而使用他,通常只能把他看作System.Object的类型。
可以进行null比较
(T1 op1,T2 op2)
if(op1 != null && op2 == null)
不能进行 op1 == op2
不能进行
T1 op1 = null
可以进行
T1 op1 = default(T1)
约束类型
多个约束用逗号隔开
可以有个where对任意或全部类型进行约束
约束必须出现在继承的后面
class MyClass<T1,T2,T3> :MyBaseClass,IMyInterface
where T1 : constraint1,constraint2 where T2 : constraint3
{
}
可用的约束
struct 值类型
class 引用类型
base-class 基类或继承自基类
interface 接口或实现了接口
new() 有一个公共的无参构造函数,必须是为类型指定的最后一个约束
泛型继承
类型约束至少与基类相同
泛型类可以从具体的、封闭式构造或开放式构造基类继承
class BaseNode { }
class BaseNodeGeneric<T> { }
// concrete type
class NodeConcrete<T> : BaseNode { }
//closed constructed type
class NodeClosed<T> : BaseNodeGeneric<int> { }
//open constructed type
class NodeOpen<T> : BaseNodeGeneric<T> { }
非泛型类可以从封闭式构造基类继承,但无法从开放式构造类或类型参数继承,因为在运行时客户端代码无法提供实例化基类所需的类型参数。
//No error
class Node1 : BaseNodeGeneric<int> { }
//Generates an error
//class Node2 : BaseNodeGeneric<T> {}
//Generates an error
//class Node3 : T {}
从开放式构造类型继承的泛型类必须为任何未被继承类共享的基类类型参数提供类型变量,如以下代码所示:
class BaseNodeMultiple<T, U> { }
//No error
class Node4<T> : BaseNodeMultiple<T, int> { }
//No error
class Node5<T, U> : BaseNodeMultiple<T, U> { }
//Generates an error
//class Node6<T> : BaseNodeMultiple<T, U> {}
从开放式构造类型继承的泛型类必须指定约束,这些约束是基类型约束的超集或暗示基类型约束:
class NodeItem<T> where T : System.IComparable<T>, new() { }
class SpecialNodeItem<T> : NodeItem<T> where T : System.IComparable<T>, new() { }
开放式构造类型和封闭式构造类型可以用作方法参数:
void Swap<T>(List<T> list1, List<T> list2)
{
//code to swap items
}
void Swap(List<int> list1, List<int> list2)
{
//code to swap items
}
泛型运算符
泛型结构
泛型接口
泛型方法
泛型类型参数会改变方法的签名
定义泛型委托 也可以使用约束
public delegate int MyDelegate<T1,T2>(T1 op1, T2 op2) where T1 :T2 ;
变体(variance)
协变(covariance)只能用作返回值
抗变(contravariance)
http://www.cnblogs.com/artech/archive/2011/01/13/1934914.html
- C#入门经典学习12-泛型2
- C#入门经典学习12-泛型
- 《C#入门经典》学习笔记(泛型)
- c#经典入门--学习笔记
- c#经典入门--学习笔记
- C#入门经典学习2-编写C#第一个程序
- C#入门经典学习1-C#简介
- <C#入门经典>学习笔记2之控制流程
- 《C#入门经典》学习笔记(变量)
- 《C#入门经典》学习笔记(函数)
- 《Visual C# 2005入门经典》学习总结
- c#经典入门学习笔记-定义集合
- c#经典入门学习笔记-定义集合
- C#入门经典学习笔记之数据类型
- C#入门经典学习4-流程控制
- C#入门经典学习5-类型转换
- C#入门经典学习6-函数
- C#入门经典学习8-面向对象
- 给定一个小数,保留该小数的后两位
- 极小极大搜索方法、负值最大算法和Alpha-Beta搜索方法
- 【Cocoa(mac) Application 开发系列之二】总结一些常用控件以及简单在自定义View上绘制字符串
- PHP文件或目录权限检查函数
- 第十六周作业 1
- C#入门经典学习12-泛型2
- Android OpenGL ES 开发教程(24):Depth Buffer
- Matlab--------mmreader 读avi错误:Initialization failed
- 第十六周作业 2
- 看看联通是怎么计算手机上网流量的?(已经得到联通赔付,详情看我的QQ空间日志112633012)
- Select函数
- poj 1504 Adding Reversed Numbers
- java面试题http://www.iteye.com/topic/1124249
- PHP下载远程文件