Genel sınıflar ve Yöntemler

Genel türler, .NET 'e parametre türü kavramını tanıtır, bu, sınıf veya yöntem, istemci kodu tarafından bildirilene ve örneklendirilene kadar bir veya daha fazla türün belirtimini erteleme sınıfları ve yöntemleri tasarlamayı olanaklı hale getirir. Örneğin, genel bir tür parametresi kullanarak T , burada gösterildiği gibi, diğer istemci kodunun, çalışma zamanı yayınları veya paketleme işlemlerinin maliyetini veya riskini ortadan kaldırarak kullanabileceği tek bir sınıf yazabilirsiniz:

// Declare the generic class.
public class GenericList<T>
{
    public void Add(T input) { }
}
class TestGenericList
{
    private class ExampleClass { }
    static void Main()
    {
        // Declare a list of type int.
        GenericList<int> list1 = new GenericList<int>();
        list1.Add(1);

        // Declare a list of type string.
        GenericList<string> list2 = new GenericList<string>();
        list2.Add("");

        // Declare a list of type ExampleClass.
        GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
        list3.Add(new ExampleClass());
    }
}

Genel sınıflar ve Yöntemler, yeniden kullanılabilirlik, tür güvenliği ve verimliliği genel olmayan karşılıklarının bir şekilde birleştirir. Genel türler, koleksiyonlarla ve bunlarla çalışan yöntemlerle en sık kullanılır. System.Collections.GenericAd alanı, birkaç genel tabanlı koleksiyon sınıfı içerir. Genel olmayan koleksiyonlar, gibi ArrayList önerilmez ve uyumluluk amacıyla korunur. Daha fazla bilgi için bkz. .net 'Teki genel türler.

Ayrıca, özel genel türler ve Yöntemler oluşturarak tür açısından güvenli ve verimli bir şekilde kendi Genelleştirilmiş çözümlerinizi ve tasarım düzenlerini sağlayabilirsiniz. Aşağıdaki kod örneğinde, tanıtım amacıyla basit bir genel bağlantılı liste sınıfı gösterilmektedir. (Çoğu durumda, List<T> kendinizinkini oluşturmak yerine .NET tarafından sunulan sınıfı kullanmanız gerekir.) Tür parametresi, T somut bir türün listede depolanan öğenin türünü belirtmek için normalde kullanıldığı çeşitli konumlarda kullanılır. Aşağıdaki yollarla kullanılır:

  • Yöntem içindeki yöntem parametresinin türü olarak AddHead .
  • Dataİç içe yerleştirilmiş sınıftaki özelliğinin dönüş türü olarak Node .
  • dataİç içe yerleştirilmiş sınıftaki özel üyenin türü olarak.

T , iç içe yerleştirilmiş sınıf için kullanılabilir Node . , GenericList<T> Örneğin, bir somut tür ile örneği oluşturulduğunda, GenericList<int> öğesinin her oluşumu T ile yerine kullanılır 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;
        }
    }
}

Aşağıdaki kod örneği, istemci kodunun GenericList<T> tamsayılar listesini oluşturmak için genel sınıfı nasıl kullandığını gösterir. Yalnızca tür bağımsız değişkenini değiştirerek aşağıdaki kod, dizelerin veya diğer özel türün listesini oluşturmak için kolayca değiştirilebilir:

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");
    }
}

Genel bakışa genel bakış

  • Kod yeniden kullanımını en üst düzeye çıkarmak için genel türleri kullanın, güvenlik ve performans yazın.
  • Genel türlerin en yaygın kullanımı koleksiyon sınıfları oluşturmaktır.
  • .NET sınıf kitaplığı, ad alanındaki çeşitli genel koleksiyon sınıflarını içerir System.Collections.Generic . Genel Koleksiyonlar, ad uzayı gibi sınıflar yerine mümkün olduğunda kullanılmalıdır ArrayList System.Collections .
  • Kendi genel arabirimlerinizi, sınıflarınızı, yöntemlerinizi, olaylarınızı ve temsilcilerinizi oluşturabilirsiniz.
  • Genel sınıflar, belirli veri türlerindeki yöntemlere erişimi etkinleştirmek için kısıtlanabilir.
  • Genel veri türünde kullanılan türlerle ilgili bilgiler, yansıma kullanılarak çalışma zamanında elde edilebilir.

C# dili belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi.

Ayrıca bkz.