C#nedir?com
 
YAZAR HAKKINDA
Sercan Ayyıldız
Sercan Ayyıldız
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
1 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: birlikte class’in class’inin datetime disinda generic kosulu myclass parametresiz private public return string tipleri vardir. C# / VC#/.NET Sercan Ayyıldız
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 13.10.2005
Okunma Sayısı : 55797
Yorum Sayısı : 3     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 12.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 12.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 12.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 12.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C# 2.0 - Generic Class Tanımlanması
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
C# 2,0 ile birlikte gelen güzel özelliklerden biri de Generic Class(Sınıf) tipler tanımlanabilmesidir. Kısaca bahsedersek Generic tanımlanan Class’ların bir örneğini oluşturmak istediğimizde, bu Class’ın işlevlerini hangi tip Class üzerinde gerçekleştireceğini belirtiriz. Ve bu işlevleri yerine getirecek olan Method’ların kabul edeceği tipler, Class’ın örneğini yaratırken belirlenmiş olur. Bu özellikten önce, bu şekildeki her tip için ayrı bir Class yazmak zorunda olurduk. Bu nedenle Generic Class tipleri daha az kod yazarak daha çok iş yapabilmemizi sağlayan güzel bir özelliktir.

.NET içinde hazır gelen bir çok Generic Class vardır. Örneğin List<T> bunlardan en çok kullanılanıdır. Burada "< >" işaretleri arasında yazılan T, List Class’ının içinde T tipinde değerler tutacağını belirtir. List<T> gibi collection tipleri dışında IComparer veya IComparable gibi Interface’lerin IComparer<T> ve IComparable<T> gibi Generic olanlarıda vardır.

Kullanımına bir kaç örnek vericek olursak;

1- )

List<Rectangle> listRect = new List<Rectangle>();
Rectangle rect = new Rectangle(10,10,100,25);
listRect.Add(rect); // parametre olarak sadece Rectangle tipinde değeler alır.
2- )

public class ButtonComparer : IComparer<Button>
{
    #region IComparer<Button> Members

    public int Compare(Button x,Button y)
    {
        return x.Text.CompareTo(y.Text);
    }

    #endregion
}
Mevcut Generic Class’lar dışında bizde kendi Generic Class’larımızı yazarabilirizHatta Generic olarak belirteceğimiz Class tipinin belirli koşulları sağlamasını sağlayabiliriz. Örnek üzerinde gidecek olursak, şöyle bir Class yazalım.

public class MyGeneric<Tip>
{
    private Tip genericValue;

    public MyGeneric() { }

    public MyGeneric(Tip genericValue)
    {
        this.genericValue = genericValue;
    }

    public Tip GenericValue
    {
        get { return genericValue; }
        set { genericValue = value; }
    }

    public void writeGenericType()
    {
        Console.WriteLine(genericValue.GetType().ToString());
    }

    public void writeGenericValue()
    {
        Console.WriteLine(genericValue.ToString());
    }
}
Burada Tip olarak geçen bizim Generic tipimiz oluyor. Yani biz MyGeneric Class’ının bir örneğini yaratırken, tıpkı List<T> Class’ında oludğu gibi bu Class’ın generic tipini belirtiyoruz. Mesela biz MyGeneric<Button> temp; şeklinde bir tanımlama yaparsak, Class tanımı içinde ki Tip, Button olur. Örnekten devam edersek;

MyGeneric<DateTime> temp = new MyGeneric<DateTime>(DateTime.Now);
temp.writeGenericType();
temp.writeGenericValue();

veya

MyGeneric<DateTime> temp = new MyGeneric<DateTime>();
temp.GenericValue = DateTime.Now;
temp.writeGenericType();
temp.writeGenericValue();
Burada writeGenericType() methodunu çalıştırdığımızda ekrana System.DateTime yazacaktır. Çünkü tanımımızda generic tip olarak DateTime verdik. Ayrıca writeGenericValue() method’uda o anki tarih ve saati yazacaktır.

Koşullu Generic tipler

Kendi Generic Class’larımızı yazarken, bir önceki örnekte Tip ile belirttiğimiz generic tipin, belirli bir class’tan türemesi veya mutlaka parametresiz bir constructor’ı olması koşullarını belirtebiliriz. Böylece daha güçlü Generic Class tipleri yazma imkanımız olur. Bu özellik önceki versiyonlarda bulunmayan where keyword’ü ve mevcut new keyword’ünün başka bir kullanımını ile uygulanır. Bunu biraz önceki örnek kod üzerinde uygulayalım;

public class MyClass
{
    private string text;

    public string Text
    {
        get { return text; }
        set { text = value; }
    }
}

public class MyGeneric<Tip> where Tip : MyClass
{
    // Bazı kodlar
}
Buarada Tip ile belirtilen Generic Class tipinin MyClass’tan türeyen bir class olma koşulunu belirmiş olduk. Haliyle class’ımızın bu son hali ile, biraz önce DateTime verdiğimiz örnek hata atacaktır. Çünkü DateTime class’ı MyClass class’ından türememiştir. Burada bir class’tan türeme koşulu ile birlikte bir veya birden fazla Interface’i de implemente etme koşulu belirtebiliriz.

public class MyClass
{
    private string text;

    public string Text
    {
        get { return text; }
        set { text = value; }
    }
}

public interface MyInterface { }

public class MyGeneric<Tip> where Tip : MyClass,MyInterface
{
    // Bazı kodlar
}

//veya

public class MyGeneric<Tip> where Tip : MyClass,MyInterface,IClonable<Tip>
{
    // Bazı kodlar
}
Bu koşulların dışında biraz önce belirttiğim, Tip class’ının parametresiz constructor’ı olma koşulu ise şöyle kullanılıyor;

public class MyGeneric<Tip> where Tip : new()
{
    // Bazı kodlar
}

// veya önceki örnekle birleştirirsek;

public class MyGeneric<Tip> where Tip : MyClass,MyInterface,new()
{
    // Bazı kodlar
}
Son duruma göre Tip ile belirteceğimiz class tipi, MyClass class’ından türemeli, MyInterface interface’ini implemente etmeli ve mutlaka parametresiz bir constructor’ ı olmalı.

Konuyu ilk fark ettiğimde, parametresiz constructor olması koşulu gibi özellikle belli bir constructor’u olan generic tip koşulu tanımlamaya çalıştım ama olmadı :-). Oda olsa iyi olurmuş ama bu kadarı bile yeterince kolaylık sağlıyor.

Sercan Ayyıldız
sercan.ayyildiz@gmail.com
Makale:
C# 2.0 - Generic Class Tanımlanması C#, Visual C# ve .NET Sercan Ayyıldız
  • Yazılan Yorumlar
  • Yorum Yaz
KAS
14
2005
haklı oldugunuz noktalar yok degil..Ama Serkan bey sanirim hali hazirda OOP yapisini bir sekilde kullanan insanlarin Ya baba generic de ne ise yarar ki yenir mi icilir mi neden kullanayim ki ? gibi ilk akillara gelen sorulari cevaplama amaciyla yazmis gibi gorunuyor..Ellerine saglik..
EKİ
17
2005
Genel bir oneri Bir makalede anlatilan classlarin veya program parcalarinin kullanildigi source kodlar download edilebilmeli. www.codeproject.comda oldugu gibi makaleyi anlamazsaniz koda bakarsiniz kodu anlamazsaniz detaylarini makaleden ogrenirsiniz. Bilgisayar programlama ile ilgili en guzel makale formatinin boyle olmasi gerektigini dusunuyorum.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor