Aybars Arslan

Console.WriteLine("Hello World");

C# ile Generics

Generic, tasarlanan kodun class, method, interface vb bir şablon yapısı için çalışması sağlayan yapıdır. Örnek verecek olursak. Sıklıkla kullandığımız List classı generic bir classtır. Şimdi bu List classının basit bir örneği yaparak basit olarak generic hakkında bilgilendirme yapacağım 🙂
Kendi List sınıfımızı yazıyoruz şimdi 🙂
List sınıfımız aşağıdaki ve görüldüğü gibi int tipinde değer eklenip int tipinde değer döndüren bir sınıf

    
public class List
{
    public void Add(int number)
    {
        throw new NotImplementedException();
    }

    public int this[int index]
    {
        get
        {
            throw new NotImplementedException();
        }
    }
}

BookList sınıfımız da aşağıda ve görüldüğü gibi book tipinde değer ekleyip Book tipinde değer döndüren bir sınıf.

    
public class Book : Product
{
    public string Title { get; set; }

    public string Isbn { get; set; }
}

public class BookList
{
    public void Add(Book number)
    {
        throw new NotImplementedException();
    }

    public Book this[int index]
    {
        get
        {
            throw new NotImplementedException();
        }
    }
}

Bunun gibi film listesi, muzik listesi vb gibi zilyon tane list tipi oluşturulabilir. Bizim bunu tüm listeler için yukarıda görüldüğü gibi ayrı ayrı list sınıfı yazmamız malumunuz zordur.(imkansız)

Bu sebeple generic bir List oluşturarak kullanacağımız tüm list elemanları için bu sınıfı kullanabiliriz. GenericListimiz T tipinde değer ekliyor. Yani sınıfımız T nesnesi tipinde yaratılır. new GenericList< Book>(); kitaplar için oluşturulmuş bir list gibi.

    
public class GenericList
{
    // whats the type we dont know yet
    public void Add(T value)
    {

    }

    public T this[int index]
    {
        get { throw new NotImplementedException(); }
    }
}

Program.cs classında çağırılmasına bakılacak olursak.,

    

class Program
{
    static void Main(string[] args)
    {
        var book = new Book
        {
            Isbn = "11111",
            Title = "Learning C#"
        };


        // Genericten önce Her tür için ayrı sınıf yazılmalı :XXXX
        //var numbers = new List();
        //numbers.Add(10);

        //var books = new BookList();
        //books.Add(book);

        // T yerine oluşturacağınız nesne tipini yazıyoruz ve kullanıma hazır.
        var numbers = new GenericList(); 
        numbers.Add(10);

        var books = new GenericList();
        books.Add(book);

        //System.Collections.Generic.
    }

}

Generic özellğini aşağıdaki gibi metodlar için de kullanıbiliriz.

    

//T IComparable
public class Utilities<T> where T : IComparable
{
    public int Max(int a, int b)
    {
        return a > b ? a : b;
    }

    public T Max(T a, T b) 
    {
        return a.CompareTo(b) > 0 ? a : b;
    }

}

Object döndürerek aynı düzeni sağlarım da diyebilirisiniz ancak objectin boxing-unboxing işlemi maliyetli olduğu için generic bize performans sağlar.

System.Collections.Generics altında yer alan .net’in generic classlarını görebilirsiniz.

Paylaş !

, ,

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir