Anasayfa

C ve Sistem Programcıları Derneği

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

menü

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

e-posta ile bilgilendirme.

Derneğimizdeki etkinliklerden haberdar olun!

Haber mektubu üyeliğiniz

Kimler çevrimiçi

Şu an 0 kullanıcı ve 1 ziyaretçi çevrimiçi.
""
dreamhost
Anasayfa

C# where keyword ile generic tiplere açılım kısıtlaması getirmek

27.06.2011 - 17:09 tarihinde aykut gönderdi
Yazan: 
Aykut TAŞDELEN

 

C# dilinde generic bir türe herhangi bir türde açılım yapılabilir. Ancak geliştirici şayet isterse açılım yapılabilecek türlerde kısıtlamaya gidebilir. Bu kısıtlama açılım yapılabilecek türlerin belirli bir taban sınıftan türetilmesi ya da belirli bir arayüzü implemente etmesiyle gerçekleştirilir. Örneğin aşağıdaki kod’da CBase sınıfından türetilen veya ISample’dan implemente edilen sınıflarla yapılacak açılımlar geçerli diğerleri ise kısıtlama nedeniyle geçersizdir. Aykut TAŞDELEN

    class CBase
    {
    }

    class CDerive1 : CBase
    {
    }

    class CDerive2 : CBase
    {
    }

    class Test <T> where T : CBase
    {
        // Generic sınıf
    }

    ////////////////////////////////////////

    interface ISample
    {
    }

    class A : ISample
    {
    }

    class B : ISample
    {
    }

    class Deneme<K> where K : ISample
    {
        // Generic sınıf 2
    }

    class Ornek<K> where K : ISample
    {
        // Generic sınıf 2
    }

    class Program
    {
        static void Main(string[] args)
        {
            Test<CBase> t1 = new Test<CBase>();
            Test<CDerive1> t2 = new Test<CDerive1>();
            Test<CDerive2> t3 = new Test<CDerive2>();

            //Test<string> t4 = new Test<string>();
            // Geçersiz açılım: string CBase'den türetilmiş bir sınıf değil

            //Test<Date> t5 = new Test<Date>();
            //Geçersiz açılım: Date CBase'den türetilmiş bir yapı değil

            ///////////////////////////////////////////////////////////////

            Deneme<A> a = new Deneme<A>();
            Deneme<B> b = new Deneme<B>();

            //Deneme<CDerive1> c = new Deneme<CDerive1>();
            //Deneme<CDerive2> d = new Deneme<CDerive2>();
            //Geçersiz açılım: CDerive1 ve 2 sınıfları ISample interface'inden
            // implemente edilmemiş
        }

Aykut TAŞDELEN

C ve Sistem Programcıları Derneği Eğitmeni

aykuttasdelen@csystem.org

  • Yazıcı uyumluYazıcı uyumlu
  • Arkadaşa gönderArkadaşa gönder
  • PDFPDF

Adres: 2.Taşocağı Cd. Oğuz Sk. Barbaros Apt. No: 11/4 PK: 34387  Mecidiyeköy / İSTANBUL Tel: (212) 274 63 60  (212) 274 99 89  (212) 275 88 97  (212) 288 35 20 Fax: (212) 275 88 97 E-Posta: csystem@csystem.org

İçerik yayınları
Fervens Drupal theme by Leow Kah Thong. Designed by Design Disease and brought to you by Smashing Magazine.