泛型是在 C# 2.0 版本中新增的,是該語言中最重要的概念之一。它們使您能夠編寫在編譯時類型安全的可重複使用、高效能程式碼。使用泛型,您可以在程式碼中使用某種類型,而無需事先了解該類型。
泛型在 .NET 中的許多地方使用,包括集合、委託和非同步程式碼。使用泛型,您不需要事先知道集合的大小,並且可以將泛型與任何元素類型一起使用,甚至是特定於您的程式碼的自訂資料類型。 C# 提供對泛型類型(類別、介面等)和泛型方法的支援。
在泛型中,您有型別參數和型別參數。這類似於具有參數的方法,您可以將參數傳遞給該方法。
宣告泛型類型的語法由位於尖括號中的型別參數所組成。類型的名稱。例如,Locator
public class Locator<T> { }
要建立 Locator
var stringLocator = new Locator<string>();
您可以在類別方法上使用類型參數 (T),如下例所示。
public class Locator{ public IList Items { get; set; } public T Locate(int index){ return Items[index]; } } var stringLocator = new Locator<string>(); string item = stringLocator.Locate(2);
泛型的另一個好處是編輯器提供的 IntelliSense。當您在 Visual Studio 或 VS Code 中鍵入 stringLocator.Locate(4) 並將滑鼠懸停在方法名稱上時;它會顯示它傳回一個字串而不是 T。如果您嘗試將結果指派給字串以外的任何類型,編譯器將引發錯誤。例如,
// Error: Cannot implicitly convert type 'string' to 'int' [c-sharp]csharp(CS0029) int item = stringLocator.Locate(2);
從泛型基底型別或泛型介面繼承時,泛型型別可以使用型別形參作為型別實參。通用 LinkedList
public class LinkedList<T> : IEnumerable<T>
泛型方法只是宣告類型參數的方法,您可以在方法內部使用該類型參數並將其用作參數和傳回類型。在下面的範例中,Swap
public class Swapper{ public T Swap<T>(T first, T second){ T temp = first; first = second; second = temp; return temp; } }
與泛型類型一樣,當您呼叫泛型方法時,它將傳回一個強類型變數。
var swapper = new Swapper(); int result = swapper.Swap<int>(5, 3);
可以有多個通用參數。 System.Collections.Generic 命名空間中的 Dictionary 類別有兩個類型參數,即鍵和值。
public class Dictionary<TKey, TValue>
最後,了解什麼是通用的很重要。對於型別來說,除了列舉之外,一切都可以是泛型的。其中包括-
對於類型成員,只有方法和巢狀類型可以是泛型的。下列成員不能是通用的-
using System; using System.Collections.Generic; class Program{ static void Main(){ var stringLocator = new Locator<string>(){ Items = new string[] { "JavaScript", "CSharp", "Golang" } }; string item = stringLocator.Locate(1); Console.WriteLine(item); // CSharp var swapper = new Swapper(); int a = 5, b = 3; int result = swapper.Swap<int>(ref a, ref b); Console.WriteLine($"a = {a}, b = {b}"); } } public class Locator<T>{ public IList<T> Items { get; set; } public T Locate(int index){ return Items[index]; } } public class Swapper{ public T Swap<T>(ref T first, ref T second){ T temp = first; first = second; second = temp; return temp; } }
輸出
CSharp a = 3, b = 5
以上是解釋泛型在 C# 中的工作原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!