范型的基本优点在于好用,数组长度是动态的;安全,指定了T的类型;减少了开销,避免了以前ArrayList或Hashtable中将object类和具体类之间相互转换所带来的开销。
高一点的用法:范型提供了一种很好的复制手段,且提高了扩展性。例如,可以自己定义范型类,如ValidateObject<T>,用于校验对象,然后根据自己的需要,扩充校验对象类,而扩充的只是新对象的具体校验部分,而仍然可以使用这个校验抽象类,提高了扩展性,复用了代码。
这是目前我的理解,主要是在使用中学习的。
泛型的概念
(1)没有泛型的时候,所有的对象都是以object为基础,如果要使用时必须进行强制类型转换,如果对于值类型,则会导致不断拆箱装箱的过程,对系统消耗很大。
(2)使用泛型时不需要通过object类进行装箱拆箱,使用的时候都会是确定的类型。
(3)泛型的概念一开始是由集合引入,因为集合中的类型都是基于object类。可以在集合中使用泛型类。
(4)泛型不仅仅用于集合,还可以用于委托、接口和方法。
泛型的优点:高性能
ArrayList list1 = new ArrayList();
list1.Add(44); //装箱
int il1 = (int)list1[0];//拆箱
foreach (int i2 in list1)
Console.WriteLine(i2); //执行拆箱
频繁的拆箱、装箱操作在没有泛型的时候反复进行,对系统资源消耗很大。可以使用泛型集合。
List<int> list2 = new List<int>();
list2.Add(44); //不执行装箱
int il2 = list2[0];//不执行拆箱
foreach (int i2 in list2)
Console.WriteLine(i2); //不执行拆箱
泛型在定义的时候就区分了值类型和引用类型。
泛型的优点:类型安全
ArrayList list = new ArrayList();
list.Add(44);
list.Add("mystring");
list.Add(new MyClass());
foreach (int i in list)
Console.WriteLine(i);
类型安全在于提前避免异常的出现。
List<int> list2 = new List<int>();
list2.Add(44);
//list2.Add("mystring");
//list2.Add(new MyClass());
直接编译不通过。
泛型的优点:代码的重用与扩展
List<T>这个泛型类在使用时可以根据需要用不同的类型实例化:
List<int> list=new List<int>();
list.Add(44);
List<string> stringList=new List<string>();
stringList.Add(“mystring”);
List<MyClass> myclassList=new List<MyClass>();
myClassList.Add(new MyClass());
泛型的优点:代码的重用与扩展
定义一个泛型类:
public class aaa<T> 注意:这里的T只是一个标识而已,定义成任何字符都可以。
{
public void abc(T a)
{
Console.WriteLine(a);
}
}
使用它:
//使用string实例化
aaa<string> aaa = new aaa<string>();
aaa.abc("aaabbb");
//使用int实例化
aaa<object> bbb = new aaa<object>();
bbb.abc(new object());
Console.Read();
命名约定
(1)泛型类型的名称用字母T作为前缀。
(2)使用泛型时,使用<T>,如:
Public class List<T> {}
Public class Linkedlist<T>{}
(3)如果泛型类型有特定的要求(例如必须实现一个派生于基类的接口),或者使用了两个或多个泛型类型,就应给泛型类型使用描述性的名称:
比如:
public interface ccc<TTT>
{ void abc(TTT arg1); }
public class aaa<TTT>:ccc<TTT>
{ public void abc(TTT a)
{ Console.WriteLine(a); } }
Public class SortedList<TKey,Tvalue>{}
泛型集合
泛型集合存在于using System.Collections.Generic下.我们主要介绍如下List<T> ,其它的泛型集合使用请查阅MSDN。
==========================================================================
范型的基本优点在于好用,数组长度是动态的;安全,指定了T的类型;减少了开销,避免了以前ArrayList或Hashtable中将object类和具体类之间相互转换所带来的开销。
高一点的用法:范型提供了一种很好的复制手段,且提高了扩展性。例如,可以自己定义范型类,如ValidateObject <T>,用于校验对象,然后根据自己的需要,扩充校验对象类,而扩充的只是新对象的具体校验部分,而仍然可以使用这个校验抽象类,提高了扩展性,复用了代码…
=======================================================================
在这段代码里,充分利用范型的模板功能,是一个完整的桥模式的应用。将操作者和操作对象解耦,操作者可以任意变化,操作对象也可以任意变化。
-
C# code
-
public class GenericFormatter < F > : IGenericFormatter where F : IFormatter, new () { IFormatter m_Formatter = new F(); /// <summary> /// Deserializes the specified serialization stream. /// </summary> /// <param name="serializationStream"> The serialization stream. </param> /// <returns></returns> public T Deserialize < T > (Stream serializationStream) { return (T)m_Formatter.Deserialize(serializationStream); } /// <summary> /// Serializes the specified serialization stream. /// </summary> /// <param name="serializationStream"> The serialization stream. </param> /// <param name="graph"> A parameter of the generics Type T </param> public void Serialize < T > (Stream serializationStream, T graph) { m_Formatter.Serialize(serializationStream, graph); } }=========================================================