C# 泛型的用法与C++ 中的模板相似。它们的出现都是为了解决如下情况的问题:即我们需要创建一个“灵活”的类或者方法,但该类或者方法在编译期间不知道使用什么类。在.NET 1.0中必须以Object类为基础,由于Object在编译期间没有安全性,必须对其进行强制类型转换;除此之外由于使用Object类而不得不进行的装箱和拆箱操作虽然很简单,但是在性能上会有比较大的损失。(英雄人物出生的背景已经交代清楚了,下面就该我们的英雄人物出场了,那是一个月黑风高的夜晚.....中间省略一千万字.....咣当!泛型出现了!)
C++模板与.NET泛型之间有一个很大的区别,对于C++模板,在用特定的类型实例化模板时,需要模板的源代码。而泛型之间不仅是C#语言的一种结构,而且是CLR定义的。所以,即使泛型类是在C#中定义的,也可以在Visual Basic中用一个特定的类型实例化该泛型。
泛型的优点:
性能——对比于使用Object类的装箱和拆箱操作,性能有很大提高
允许更好的重用二进制代码——(泛型可以定义一次,用许多不同的类型实例化,而不需要象C++模板那样访问源码)
代码可扩展性高——(在用某个类型实例化泛型类时不会在IL代码中复制这些类,但是在JIT编译器把泛型类编译为内部码时,会给每个值类型创建一个新类;引用类型共享同一个内部类的所有实现代码,这是因为值类型的长度不固定,而引用类型的长度固定为4字节)
泛型类:
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> { }
浙公网安备 33010602011771号