泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。
我的理解就是:比如说一个方法,里面的逻辑都是相同的,然后只是每次传的参数类型不一样,那么按照一般的情况下,就需要重写一个方法,替换参数类型,然后如果使用泛型,就可以先不定义具体的数据类型,等到使用的时候再将具体的数据类型传进来就可以了。
泛型方法:
class Simple { static public void ReverseAndPrint<T>(T[] arr) { Array.Reverse(arr); foreach(T item in arr) { Console.WriteLine("{0},",item.ToString()); } Console.WriteLine(""); } } class Program { static void Main() { var intArray=new int[]{3,5,7,9,11}; var stringArray=new string[]{"first","second","third"}; var doubleArray=new double[]{3.567,7,891,2,345}; Simple.ReverseAndPrint<int>(intArray); Simple.ReverseAndPrint(intArray); Simple.ReverseAndPrint<string>(stringArray); Simple.ReverseAndPrint(stringArray); Simple.ReverseAndPrint<double>(doubleArray); Simple.ReverseAndPrint(doubleArray); } }
泛型类:
创建和使用常规的、非泛型的类有两个步骤:声明和创建类的实例。但是泛型类不是实际的类,而是类的模板,所以我们必须从它们构建实际的类类型,然后创建实例。
- 在某些类型上使用占位符来声明一个类
- 为占位符提供真实类型。这样就有了真实类的定义,填补了所有的“空缺”。该类型称为构造类型(constructed type)
- 创建构造类型的实例
声明泛型类
声明一个简单的泛型类和声明普通类差不多,区别如下。
- 在类名后放置一组尖括号
- 在尖括号中用逗号分隔的占位符字符串来表示希望提供的类型。这叫做类型参数(type parameter)
- 在泛型类声明的主体中使用类型参数来表示应该替代的类型
class SomeClass<T1,T2> { public T1 SomeVar=new T1(); public T2 OtherVar=new T2(); }
泛型类型声明中没有特殊的关键字,取而代之的是尖括号中的类型参数列表。
创建构造类型
一旦创建了泛型类型,我们就需要告诉编译器能使用哪些真实类型来替代占位符(类型参数)。创建构造类型的语法如下,包括列出类名并在尖括号中提供真实类型来替代类型参数。要替代类型参数的真实类型叫做类型实参(type argument)
SomeClass<short,int>
创建变量和实例
MyNonGenClass myNGC=new MyNonGenClass(); SomeClass<short,int> mySc1=new SomeClass<short,int>(); var mySc2=new SomeClass<short,int>();
和非泛型一样,引用和实例可以分开创建。
SomeClass<short,int> myInst; myInst=new SomeClass<short,int>();
可以从同一泛型类型构建不同类类型。每个独立的类类型,就好像它们都有独立的非泛型类声明一样。
class SomeClass<T1,T2> { ... } class Program { static void Main() { var first=new SomeClass<short,int>(); var second=new SomeClass<int,long>(); } }
转自:http://www.cnblogs.com/moonache/p/6385258.html