1、什麼是泛型?
泛型是程序設計語言的一種特性。允許程序員在強類型程序設計語言中編寫
代碼時定義一些可變部分,那些部分在使用前必須作出指明。各種程序設計語言和其編譯器、運行環境對泛型的支持均不一樣。將類型參數化以達到代碼復用提高軟件開發工作效率的一種數據類型。泛型類是引用類型,是堆對象,主要是引入了類型參數這個概念。
泛型是具有占位符(類型參數)的類、結構、接口和方法,這些占位符是類、結構、接口和方法所存儲或使用的一個或多個類型的占位符。泛型集合類可以將類型參數用作它所存儲的對象的類型的占位符;類型參數作為其字段的類型及其方法的參數類型出現。泛型方法可以將其類型參數用作其返回值的類型或者其某個形參的類型。
2、泛型的運用
使用泛型類型可以最大限度地重用代碼、保護類型的安全以及提高性能。
泛型最常見的用途是創建集合類。
.NET Framework 類庫在 System.Collections.Generic 命名空間中包含幾個新的泛型集合類。應盡可能地使用這些類來代替普通的類,如 System.Collections 命名空間中的 ArrayList。
您可以創建自己的泛型接口、泛型類、泛型方法、泛型事件和泛型委托。
可以對泛型類進行約束以訪問特定數據類型的方法。
關於泛型數據類型中使用的類型的信息可在運行時通過反射獲取。
3、泛型的類型
大概有以下幾個集合類型:
(1). List,這是我們應用最多的泛型種類,它對應ArrayList集合。
(2). Dictionary,這也是我們平時運用比較多的泛型種類,對應Hashtable集合。
(3). Collection對應於CollectionBase
(4). ReadOnlyCollection 對應於ReadOnlyCollectionBase,這是一個只讀的集合。
(5). Queue,Stack和SortedList,它們分別對應於與它們同名的非泛型類。
4、泛型的簡單舉例
這個類是Person類的操作類,可以自由的增加或刪除Person類.如果現在要為其他的類寫一個功能與這個類一樣的操作類,相信只需要將Person類替換一下就可以了.不過在了解泛型之後你就可以這樣來用.
List<Person> persons = new List<Person>();
persons.Add(new Person());
Person person = persons[0];
比如,如果要將Person類換成Employee類,只需要像這樣寫.
List<Employee> employees= new List<Employee>();
employees.Add(new Employee());
Employee employee= employees[0];
List是C#中已經定義好的泛型類,現在我們可以自己定義它.
5、運用到實例中,使用泛型和非泛型的舉例
class Program
{
static void Main(string[] args)
{
#region 使用非泛型ArrayList
/*ArrayList array = new ArrayList();
array.Add(10);//int是值類型,而Add方法只接受引用類型(object),所以對值類型進行了裝箱操作(object(10))
array.Add("劉能");
array.Add(DateTime.Now);//DateTime是值類型,而Add方法只接受引用類型(object),所以對值類型進行了裝箱操作
Person p = new Person();
p.Name = "籐香";
p.Age = 20;
array.Add(p);
//double mianji = Math.PI * (int)array[0]*(int)array[0];
double mianji = Math.PI * Convert.ToInt32(array[0]) * Convert.ToInt32(array[0]);
Int32 num = 10;
Console.WriteLine(num + num);
Console.WriteLine(mianji);
//foreach (object obj in array)
//{
// Console.WriteLine(obj);
//}*/
#endregion
#region 使用泛型List,凡是能夠使用數組的地方,都可以使用list,哪怕你是多維數組
List<string> list = new List<string>();
list.Add("10");
#endregion
Console.ReadKey();
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}