Udostępnij za pośrednictwem


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#)

System.Collections.Generic

Koncepcje

Przewodnik programowania w języku C#