Wprowadzenie do typów ogólnych (Przewodnik programowania w języku C#)
Rodzajowy klasy i metody łączenia ponownego użycia, typ bezpieczeństwa i efektywności w sposób, że nie można ich odpowiedników-uniwersalne.Najczęściej używanych elementów Generic kolekcje i metody, które operują na nich.Wersja 2.0.NET Framework class library zawiera nowy obszar nazw, System.Collections.Generic, który zawiera kilka nowych klas opartych na rodzajowy kolekcji.Zaleca się, że wszystkie aplikacje, docelowe .NET Framework 2.0 i nowsze używać nowych klas rodzajowej kolekcji zamiast starszych odpowiedników nierodzajową takich jak ArrayList.Aby uzyskać więcej informacji, zobacz Typy ogólne w bibliotece klas programu .NET Framework (Przewodnik programowania w języku C#).
Oczywiście można również utworzyć niestandardowe typy rodzajowe i metod, aby zapewnić własne generalized rozwiązań i wzorach projektowych, które są typu bezpieczne i skuteczne.Poniższy przykład kodu pokazuje prostą klasę rodzajowy połączone listy dla celów demonstracyjnych.(W większości przypadków należy używać List dostarczonych przez klasę.NET Framework class library, zamiast tworzyć własne). Parametr typu T jest używana w kilku miejscach, gdzie konkretny typ byłyby normalnie używane do wskazać typ elementu, przechowywanych na liście.Jest on używany w następujący sposób:
Jako typ parametru metody w AddHead metody.
Jako typu zwrotnego metody publiczne GetNext i Data właściwość w zagnieżdżony Node klasy.
Jako typ danych elementu członkowskiego prywatnego w klasie zagnieżdżone.
Należy zauważyć, że t jest dostępny dla zagnieżdżony Node klasy.Gdy GenericList<T> zostaje zainicjowana z betonu typu, na przykład jako GenericList<int>, każde wystąpienie T zostaną zastąpione int.
// type parameter T in angle brackets
public class GenericList<T>
{
// The nested class is also generic on T.
private class Node
{
// T used in non-generic constructor.
public Node(T t)
{
next = null;
data = t;
}
private Node next;
public Node Next
{
get { return next; }
set { next = value; }
}
// T as private member data type.
private T data;
// T as return type of property.
public T Data
{
get { return data; }
set { data = value; }
}
}
private Node head;
// constructor
public GenericList()
{
head = null;
}
// T as method parameter type:
public void AddHead(T t)
{
Node n = new Node(t);
n.Next = head;
head = n;
}
public IEnumerator<T> GetEnumerator()
{
Node current = head;
while (current != null)
{
yield return current.Data;
current = current.Next;
}
}
}
Poniższy przykład kodu pokazuje, jak kod klienta używa rodzajową GenericList<T> klasy, aby utworzyć listę liczb całkowitych.Po prostu zmieniając typ argumentu, następujący kod można łatwo modyfikować do tworzenia list ciągów znaków lub dowolny inny typ niestandardowy:
class TestGenericList
{
static void Main()
{
// int is the type argument
GenericList<int> list = new GenericList<int>();
for (int x = 0; x < 10; x++)
{
list.AddHead(x);
}
foreach (int i in list)
{
System.Console.Write(i + " ");
}
System.Console.WriteLine("\nDone");
}
}
Zobacz też
Informacje
Typy ogólne (Przewodnik programowania w języku C#)