2010年12月19日

C# 泛型概念,LIST泛型

使用泛用型別(Generic)可以讓程式碼重複使用, 並確保型別安全性和效能‧泛用除了可以在自己宣告的類別理使用外, .net的集合類別大多以泛型為基礎, 像是List‧以下將先介紹泛型的概念‧

泛型概念

假設有一類別為Person, 有兩資料參數:名字和編號,實作的類別有employee和student, 名字型態為string這沒問題,在employee的編號為文字型態,student的編號為數字型態,這時就可以用泛型來表示編號,以下是整個程式碼:
public class Person<T>
{
private string _name;// 名字
private T _no;//編號


public Person(string name, T no) //初始化Person
{
_name = name;
_no = no;
}
public T getNo() //取得編號
{
return _no;
}

}
protected void Button2_Click(object sender, EventArgs e)
{
Person<int> student = new Person<int>("王小明", 98012); //宣告student類別
Person<string> employee = new Person<string>("王小明", "c001");//宣告employee類別
Response.Write(student.getNo() + "<br>" + employee.getNo());//印出student,employee編號
}

傳入泛型,在類別可以使用在一個以上的變數。

public class Person<T>
{


vate string _name;// 名字
private T _no;//編號

private T _no2;//編號2

…
}
protected void Button2_Click(object sender, EventArgs e)
{

Person<int> student = new Person<int>("王小明", 98012); 
}



也可傳入多個泛型。


public class Person<T,P>
{


vate string _name;// 名字
private T _no;//編號

private P_no2;//編號2
...
}

protected void Button2_Click(object sender, EventArgs e)
{

Person<int,string> student = new Person<int,string>("王小明", 98012,”0921888111”); 
}



LIST泛型

list支援泛型,寫法:List<yourCls>,yourCls是要存在List的資料類別

public class Car
{
private string _Make; //製造商
private string _Year; //年分

public Car(string m, string y)
{
Make = m;
Year = y;
}

public string Make
{
get
{
return _Make;
}
set
{
_Make = value;
}
}

public string Year
{
get
{
return _Year;
}
set
{
_Year = value;
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
List<Car> carList = new List<Car>(); //宣告泛型類別
carList.Add(new Car("Ford", "1995")); //加入car類別實體到List
carList.Add(new Car("BMW", "1997"));
carList.Add(new Car("Benz", "1999"));
carList.Add(new Car("Toyota", "2001"));
carList.Add(new Car("Luxgen", "2003"));
foreach (Car c in carList) //顯示list裡的car資料
{

Response.Write(c.Make + ", " + c.Year + "<br/>");
}
}





參考:



泛型 (C# 程式設計手冊)


[C#] 泛型的意義 (Generics)

沒有留言:

張貼留言