کلاس جنریک

تعریف یک کلاس جنریک بسیار شبیه به تعریف یک متد جنریک است. کلاس جنریک دارای یک علامت بزرگتر و کوچک‌تر و یک نوع پارامتر خاص می‌باشد. برنامه زیر مثالی از یک کلاس جنریک می‌باشد :

using System;

public class GenericClass<T>
{
    private T someField;

    public GenericClass(T someVariable)
    {
        someField = someVariable;
    }

    public T SomeProperty
    {
        get { return someField; }
        set { someField = value; }
    }
}

public class Program
{
    public static void Main()
    {
        GenericClass<double> genericDouble = new GenericClass<double>(30.50);
        GenericClass<int> genericInt = new GenericClass<int>(10);

        Console.WriteLine("genericDouble.SomeProperty = {0}",
            genericDouble.SomeProperty);
        Console.WriteLine("genericInt.SomeProperty = {0}",
            genericInt.SomeProperty);

        genericDouble.SomeProperty = 100.32;
        genericInt.SompProperty = 50;
    }
}
genericDouble.SomeProperty = 30.50
genericInt.SomeProperty = 10

در مثال بالا یک کلاس جبریک که دارای یک فیلد، یک خاصیت و یک سازنده است را ایجاد می‌کنیم. تمام مکانهایی که ورودی T در آنها قرار دارد بعداً توسط انواعی که مد نظر شما است، جایگزین می‌شوند. وقتی یک نمونه از کلاس جنریک تان ایجاد می‌کنید، یک نوع هم برای آن در نظر بگیرید (<int>). مانند متدهای جنریک می‌توانید چندین نوع پارامتر به کلاسهای جنریک اختصاص دهید.

public class GenericClass<T1, T2, T3>
{
    private T1 someField1;
    private T2 someField2;
    private T3 someField3;  
}

چون نمی‌دانید T1، T2 و T3 از چه نوعی هستند، نمی‌توانید مانند مثال زیر، از آنها نمونه جدید ایجاد کنید.

public GenericClass //Constructor
{
    someField1 = new T1();
    someField2 = new T2();
    someField3 = new T3();
}

کلاسهای غیر جنریک می‌توانند از کلاسهای جنریک ارث بری کنند، اما باید یک نوع برای پارامترکلاس پایه جنریک تعریف کنید.

public class MyClass : GenericClass<int>
{

}

یک کلاس جنریک هم می‌تواند از یک کلاس غیر جنریک ارث بری کند.