c# 語言和公共語言執行時 (clr) 的 2.0 版本中新增了泛型。 泛型將型別引數的概念引入 .net framework,這樣就可以設計具有以下特徵的類和方法:在客戶端**宣告並初始化這些類和方法之前,這些類和方法會延遲指定乙個或多個型別。
泛型定義
泛型是為所儲存或使用的乙個或多個型別具有佔位符(型別形參)的類、結構、介面和方法。 泛型集合類可以將型別形參用作其儲存的物件型別的佔位符;型別形參呈現為其字段的型別和其方法的引數型別。 泛型方法可將其型別形參用作其返回值的型別或用作其形參之一的型別。
以下**舉例說明了乙個簡單的泛型類定義。
publicclass generic
建立泛型類的例項時,指定用於替代型別形參的實際型別。 在型別形參出現的每一處位置用選定的型別進行替代,這會建立乙個被稱為構造泛型類的新泛型類。 你將得到根據你選擇的型別而定製的型別安全類,如以下**所示。
publicstatic
void
main()\""
, g.field);
console.writeline(
"generic.field.gettype() =
", g.field.gettype().fullname);
}
例如,通過使用泛型型別引數 t,可以編寫其他客戶端**能夠使用的單個類,而不會產生執行時轉換或裝箱操作的成本或風險,如下所示:
// 定義通用泛型類public
class genericlist
}class
testgenericlist
static
void
main()
}
泛型類和泛型方法兼具可重用性、型別安全性和效率,這是非泛型類和非泛型方法無法實現的。 泛型通常與集合以及作用於集合的方法一起使用。 .net framework 2.0 版類庫提供新的命名空間 system.collections.generic,其中包含幾個新的基於泛型的集合類。 建議所有定目標到 .net framework 2.0 及更高版本的應用程式都使用新增的泛型集合類,而不是舊的非泛型集合類(如 arraylist)。 有關詳細資訊,請參閱 .net 中的泛型。
當然,也可以建立自定義泛型型別和泛型方法,以提供自己的通用解決方案,設計型別安全的高效模式。 以下**示例演示了出於演示目的的簡單泛型鏈結列表類。 (大多數情況下,應使用 .net framework 類庫提供的 list 類,而不是自行建立類。)在通常使用具體型別來指示列表中所儲存項的型別的情況下,可使用型別引數t
。 其使用方法如下:
請注意,t 可用於node
巢狀類。 如果使用具體型別例項化genericlist
(例如,作為genericlist
),則出現的所有t
都將替換為int
。
// 泛型 t 型別的類public
class genericlist
private
node next;
public
node next
set
}//定義乙個私有 t(型別) 資料型別的變數
private
t data;
//t 型別作為屬性的返回型別
public
t data
set }}
private
node head;
//建構函式
public
genericlist()
//t 作為方法的引數型別
public
void
addhead(t t)
public ienumeratorgetenumerator()
}}
以下**示例演示了客戶端**如何使用泛型genericlist
類來建立整數列表。 只需更改型別引數,即可輕鬆修改以下**,建立字串或任何其他自定義型別的列表:
classtestgenericlist
foreach (int i in
list)
system.console.writeline(
"\n 完成");
}}
泛型主要有兩個優點:
更多相關資訊:
C 2 0 新增功能
泛型 該語言中新增了一些泛型型別,使得程式設計師能夠實現程度很高的 重用,獲得更高的集合類效能。泛型型別只存在 arity 上的不同。也可以將引數強制為特定的型別。有關更多資訊,請參見泛型型別引數。迭代器 迭代器使得規定 foreach 迴圈將如何迴圈訪問集合的內容變得更加容易。分部類 分部型別定義...
c 2 0的新功能 一 泛型類
一 定義 public class stack t m items public void push t item public t pop public stack 二 使用 stactstack new stack stack.push 1 stack.push 2 stack.pust sss...
c 2 0泛型學習 一
1using system 23public class stack 410 public stack int size 11 15 public void push object item 16 23 public object pop 24 30 else 31 35 36 37 2.使用泛型的...