Sonuçlar 1 to 2 of 2

Konu: C# 2.0'da Ad Uzaylarına Takma Ad Verme

  1. #1

    Default C# 2.0'da Ad Uzaylarına Takma Ad Verme

    C# dilinde class, struct, numaralandırma ( enumeration ) gibi yapıları tam ismi ile ( fully qualified name ) çağırmak gerekmektedir. Bu da, örneklemek gerekirse, ASP.NET'te kullanılan Button class'ı çağırılmak istendiğinde System.Web.UI.WebControls.Button şekline çağırılmasının gerektiği anlamına geliyor. Bu durum çoğu zaman sıkıcı ve yorucu bir hal almaktadır. Bu nedenle using deklerasyonu sıklıkla kullanılmaktadır. Kod 1'de using deklerasyonuna bir örnek bulunmaktadır.
    using System.Web.UI.WebControls;

    class Butonlar
    {
    public static Button WebButtonOlustur()
    {
    return new Button();
    }
    }

    Kod 1

    Bu using deklerasyonu, using anahtar kelimesinin ( keyword ) yanına yazılan ad uzayının ( namespace ) altındaki tüm yapıların tam ismi ile çağırılmasına gerek kalmadan sadece ismiyle çağırılabilmesini sağlar. Bu durum her ne kadar büyük kolaylık sağlasa da bazı durumlarda sıkıntı yaratabilmektedir. Kod 2'de, using ile deklere edilmiş iki adet ad uzayı bulunmaktadır ve bu iki ad uzayının altında da farklı Button class'ları bulunmaktadır. Dolayısıyla derleyici "Button" çağırımını gördüğünde hangi ad uzayı altındaki Button class'ının çağırılmak istendiğini anlayamayacaktır; derleyici zamanı hatası oluşacaktır.

    using System.Windows.Forms;
    using System.Web.UI.WebControls;

    class Butonlar
    {
    public static Button WebButtonOlustur()
    {
    return new Button(); // hangi Button?
    }
    public static Button WindowsButtonOlustur()
    {
    return new Button();// hangi Button?
    }
    }

    Kod 2

    Bu duruma çözüm olarak using deklerasyonu ile class'lara takma ad ( alias ) tanımlama uygulanabilir. Kod 2, Kod3 şekline dönüştürülebilir.

    using WinButton = System.Windows.Forms.Button;
    using WebButton = System.Web.UI.WebControls;
    using System.Windows.Forms;
    using System.Web.UI.WebControls;

    class Butonlar
    {
    public static WebButton WebButtonOlustur()
    {
    return new WebButton();
    }
    public static WinButton WindowsButtonOlustur()
    {
    return new WinButton();
    }
    }

    Kod 3

    Bu çözümün yetersiz kaldığı nokta ise isim çakışması yaşanan her yapı için ayrı ayrı takma ad tanımlamanın zorluğudur. Bu noktada Kod 4'teki kullanım sorunumuzu halledecektir.

    using SWF = System.Windows.Forms;
    using SWUW = System.Web.UI.WebControls;

    class Butonlar
    {
    public static SWUW.Button WebButtonOlustur()
    {
    return new SWUW.Button();
    }
    public static SWF.Button WindowsButtonOlustur()
    {
    return new SWF.Button();
    }
    }

    Kod 4

    Kod 4 sorunu büyük ölçüde çözse de projeye ekli olan referanslarda, takma ad olarak tanımladığımız adla aynı ada sahip ad uzayları varsa sıkıntı yaratacaktır. Kod 4 tekrar incelendiğinde, projede SWF ya da SWUW adlarında erişilebilir ad uzayları var ise Kod 4 derlenmeyecektir. Bu noktada C# 2.0 ile gelen "::" operatörü, hem ad uzayı olan hem de takma ad olan adları aynı anda kullanabiliyor olma imkanı sunuyor. Dikkat edilmesi gereken nokta ise takma ad tanımladığımız ad uzaylarının altındaki yapılar çağırılmak istendiğinde "." yerine "::" kullanmanın gerektiğidir. Kod 4, Kod 5 şeklinde yazıldığında isim çakışmaları minimize edilmiş olacaktır.

    using SWF = System.Windows.Forms;
    using SWUW = System.Web.UI.WebControls;

    class Butonlar
    {
    public static SWUW::Button WebButtonOlustur()
    {
    return new SWUW::Button();
    }
    public static SWF::Button WindowsButtonOlustur()
    {
    return new SWF::Button();
    }
    public static SWF.Button Olustur()
    {
    return new SWF.Button();
    }
    }

    Kod 5

    Kod 5'te System.Web.UI.WebControls.Button, System.Windows.Forms.Button ve SWF.Button class'ları isim çakışması yaratmadan kısa şekilde yazılmıştır. Ad uzaylarına takma ad verildiğinde isim çakışmalarını engellemek adına kullanılacak "::" operatörü C# 1.1'de ad uzaylarına takma ad verdiğimizde yaşanan sıkıntıyı çözmektedir.

  2. #2

Similar Threads

  1. yüz verme şu kalbime...
    By Matrak in forum Aşk Şiirleri
    CEvaplar: 0
    Son Mesaj: 27-05-09, 18:54
  2. Saati sol kola takma..
    By Matrak in forum Genel Kültür
    CEvaplar: 1
    Son Mesaj: 13-03-09, 00:43
  3. Titresimli Resme Efekt verme
    By djbooner in forum Fireworks,Photoshop ve Grafik
    CEvaplar: 6
    Son Mesaj: 28-09-08, 18:08
  4. Takma kirpik
    By YaGMuR_CiNi in forum Güzellik & Moda
    CEvaplar: 0
    Son Mesaj: 15-04-08, 02:06

Tags for this Thread

Bookmarks

Gönderme izinleri

  • Yeni Konu açamazsınız
  • Konulara cevap yazamazsınız.
  • Eklenti gönderemezsiniz.
  • Mesajlarınızı düzenleme izniniz yok.
  •