详解C#泛型特性及相关实例

详解C#泛型特性及相关实例

ID:38055015

大小:43.50 KB

页数:5页

时间:2019-05-24

详解C#泛型特性及相关实例_第1页
详解C#泛型特性及相关实例_第2页
详解C#泛型特性及相关实例_第3页
详解C#泛型特性及相关实例_第4页
详解C#泛型特性及相关实例_第5页
资源描述:

《详解C#泛型特性及相关实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、详解C#泛型特性及相关实例在这里我们将讨论的是C#泛型特性及相关实例,希望通过本文如此详细的介绍,能对大家了解泛型有所帮助。本文将为大家讲述.NET中最常见的一种特性,C#泛型。希望通过本文能帮助大家更好的学习和理解C#泛型,在平时的开发工作中起到事半功倍的效果。oC#泛型问题简介和陈述o详述C#泛型集合相关内容o深度剖析C#泛型的使用o关于C#泛型作用的简单说明oC#泛型支持简单描述泛型,.NET的这个特性相信大家都已经很熟悉了,提起泛型,不能不首先提到C++中的模板,C++中模板的引入大大提高了代码的重用性,因此也得到了许多程序员的喜爱。因此,在同为强类型语言平台的.NET2.

2、0和Java1.5中,它们也都不约而同的引入了泛型的对语言和平台的支持。不过虽然三种语言最终都提供了将类型参数化的功能,然而这个功能在三个平台或语言中的实现却大大不同。相对来说,C++的模板功能是三者中最为强大的,不过由于.Net和Java对类型安全和稳定性要求更高,它们对泛型的支持要稍微简单,不过即使如此,二者对泛型特性的实现也引起了两个阵营中程序员们的争论,不过最终普遍认为Java的伪泛型(擦拭法)要比.NET的JIT级别的真正的泛型性能要差(java仍然有装箱,拆箱操作)。当然这些是后话,下面我们来看看.NET的泛型到底如何使用吧!基本介绍.NET2.0以后以后支持在很多类型

3、上使用泛型,包括类、结构、接口、委托和方法成员,在这些类型上使用泛型和在类上使用是一样的。它甚至支持同一个接口但不同泛型类型的实现,这有点类似重载在类级别的实现。最后.NET允许你同时定义多个泛型类型。在泛型方法中的泛型类型基本跟在类中使用情况一样,不过泛型方法有一个方便程序员的地方就是它的类型推断功能,这意味着程序员可以即能和使用普通方法一样使用这些方法,同时又能享受泛型带来的方便。e.g.代码6.static void Test(T t, U u) { }static void main(){ 7.//在函数中我们可以不用声明参数类型,编译器会自动根据实际数据  8

4、.//自动推断类型 9.Test(10, "20");Test(1.1, 2.2);} 下面我们来看看泛型在.NET中使用的一些需要注意的地方。1.泛型在嵌套类中的使用。嵌套的子类会自动继承(?)包裹类的泛型类型,当然,你也可以在嵌套类中覆盖掉包裹类的类型,不过编译器会在编译的时候发出警告来提醒用户注意避免误写。e.g.1.class Container{ 2.//编译器会在这里发出警告 3.//告诉用户这里的泛型和包裹类相同 4.class Nested{ void Method(T p0, U p1) { }}} 2.协变和逆变的问题。关于协变和逆变的定义简单

5、来说就是泛型类型是否允许子类和父类之间转换,这里不做详细讨论,读者如果有兴趣可以参考这篇文章。在.net4.0以前是不支持协变和逆变的,这也让我们的代码有些时候实现起来很别扭。下面可以看个简单的例子(注:这个例子仅作说明用,不一定恰当)。首先我们定义两个数据类型,IData和IOperation:5.interface IData{void method();} 6.interface IOperation  7.where T : IData{ void Run(T data);} 然后我们分别定义不同类型的数据和操作类:代码8.class AddData : IData{

6、public int A1, A2; 9.public void method() { }}class Add : IOperation 10.{public void Run(AddData d) 11.{Console.WriteLine(d.A1 + d.A2);}} 12.class ComplexData : IData{public void method() { } 13.public int A1, A2, B1, B2;} 14.class ComplexAdd : IOperation{ 15.public void 

7、Run(ComplexData d){Console.WriteLine("{0}+{1} 16.i",d.A1 + d.A2,d.B1+d.B2);}} 这里如果能这样使用我们认为应该是安全的:17.IOperation opr = new Add();opr.Run(data1); 18.opr = new ComplexAdd();opr.Run(data2); 然而这样的代码是无法通过编译的,尽管我们知道它们的使用绝对安全的,因为AddData或

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。