簡略進修C#中的泛型辦法應用。本站提示廣大學習愛好者:(簡略進修C#中的泛型辦法應用)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略進修C#中的泛型辦法應用正文
泛型辦法是應用類型參數聲明的辦法,以下所示:
static void Swap<T>(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; }
上面的代碼示例演示一種應用 int 作為類型參數的辦法挪用方法:
public static void TestSwap() { int a = 1; int b = 2; Swap<int>(ref a, ref b); System.Console.WriteLine(a + " " + b); }
也能夠省略類型參數,編譯器將揣摸出該參數。上面對 Swap 的挪用等效於後面的挪用:
Swap(ref a, ref b);
雷同的類型推理規矩也實用於靜態辦法和實例辦法。編譯器可以或許依據傳入的辦法實參揣摸類型形參;它沒法僅從束縛或前往值揣摸類型形參。是以,類型推理不實用於沒有參數的辦法。類型推理在編譯時、編譯器測驗考試解析重載辦法簽名之進步行。編譯器向同享雷同稱號的一切泛型辦法運用類型推理邏輯。在重載解析步調中,編譯器僅包含類型推理獲得勝利的那些泛型辦法。
在泛型類中,非泛型辦法可以拜訪類級別類型參數,以下所示:
class SampleClass<T> { void Swap(ref T lhs, ref T rhs) { } }
假如界說采取雷同類型參數作為包括類的泛型辦法,編譯器將生成正告 CS0693,由於在辦法規模內為外部 T 供給的參數隱蔽了為內部 T 供給的參數。假如須要應用其他類型參數(而不是實例化類時供給的類型參數)來靈巧地挪用泛型類辦法,請斟酌為辦法的類型參數供給另外一個標識符,以下面示例的 GenericList2<T> 中所示。
class GenericList<T> { // CS0693 void SampleMethod<T>() { } } class GenericList2<T> { //No warning void SampleMethod<U>() { } }
應用束縛對辦法中的類型參數啟用更專門的操作。此版本的 Swap<T> 如今名為 SwapIfGreater<T>,它只能與完成 IComparable<T> 的類型參數一路應用。
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T> { T temp; if (lhs.CompareTo(rhs) > 0) { temp = lhs; lhs = rhs; rhs = temp; } }
泛型辦法可使用很多類型參數停止重載。例如,以下辦法可以全體位於統一個類中:
void DoWork() { } void DoWork<T>() { } void DoWork<T, U>() { }