Selamun Aleykum cümleten (: Daha önce C#’ta takma isim verme ile ilgili kısaca giriş yapmıştık, neden ihtiyaç duyulduğunu yazmıştım. Bu dökümanda da takma isimden bahsedeceğim, ancak bu takma isim farklı olacak, şöyle ki ;
Bazen sadece tiplere takma isim vererek sorunu çözemeyiz, çünkü birden fazla ise hepsine tek tek isim vermek güç olacaktır. Elimizde Mat ve Mat2 olmak üzere toplam 2 tane kütüphane olsun, her ikisininde aynı firma tarafından üretildiğini varsayıyorum ve Mat2 ; Mat kütüphanesinin daha gelişmişi olsun ve her iki kütüphaneyi de projemizde kullanmak zorunda kaldığımızdan yola çıkıyorum.
Bu kütüphanelerde aynı isimde ; birden çok isim alanı ve sınıflar var, biz bunların hepsine tek tek takma isim mi vereceğiz ? Hayır, C# 2.0 ile beraber dll kütüphanelerine takma isimler verebiliyoruz.
Class Library projemizi oluşturalım ; Solution’a sağ tuşla bastıktan sonra >Add>New Project>Class Library deyip projemizi oluşturduk.
Mat kütüphanesi;
using System;
namespace Matematik
{
public class Toplam
{ }
public class Carpim
{ }
}
using System;
namespace Matematik{ public class Toplam { }
public class Carpim { }
}
Mat2 Kütüphanesi;
using System;
namespace Matematik
{
public class Toplam
{}
public class Carpim
{}
}
Görüldüğü gibi, kütüphane isimleri hariç, isim alanları,sınıflar hepsi aynı. Bu projemizi bir dll kütüphanesine dönüştürelim şimdi. Projelerimize sağ tuşla basıp ; Build’e basalım. Projemizi bir dll kütüphanesine çevirdi.
Her iki kütüphanemizde de Matematik.Toplam ve Matematik.Carpim sınıflarının olduğunu unutmayın.
Oluşturduğumuz kütüphaneleri Solution’a referans olarak eklemek zorundayız, aksi takdirde using ile isim alanını belirttiğimiz de hata alırız. References’a sağ tuşla basıp, Add Reference a tıklayalım, karşımıza çıkan listeden Projects sekmesine tıklayın bu bizim projemizde varolan kütüphaneleri gösterir, (Not : eğer siz başka bir kütüphane eklemek isterseniz Browse sekmesinden seçebilirsiniz.)
Referans olarak eklediğimizden rahatça isim alanını using ile belirtebiliriz, using Matematik deyip isim alanımızı belirttik. Şimdi projemizde bu kütüphaneleri kullanmaya çalışalım ;
//program.cs
using System;
using Matematik;
namespace Nurullah
{
class MainClass
{
public static void Main()
{
//her iki kütüphanede de bulunan Carpim sınıfını kurmaya çalıştık.
Carpim carpim = new Carpim();
}
}
}
The type ‘Matematik.Carpim’ exists in both ‘d:\pr\Mat\bin\Debug\Mat.dll’ and ‘d:\pr\Mat2\bin\Debug\Mat2.dll’
Yani : Matematik.Carpim tipi her iki kütüphanede de bulunuyor.
Evet şimdi gelelim çözüme. C# 2.0 ile gelen extern alias (harici takma isim) verdiğimizde sorunun çözüldüğünü görüyoruz. extern alias bir anahtar sözcüktür ve bunu using deyimlerindne önce yazmak zorundayız
Oluşturduğumuz kütüphanelere bir defa tıklayalım ve Properties kısmından Aliases‘den takma ismini verelim. Mat için Mat, Mat2 için Mat2 takma ismini kullandım.
Extern Alias verdikten sonra bu kütüphaneleri sıradan yollardan çağıramıyoruz. Erişim için :: operatörü eklenmiştir.
Yeni program.cs dosyamız ;
extern alias Mat;
extern alias Mat2;
using System;
namespace Nurullah
{
class MainClass
{
public static void Main()
{
Mat::Matematik.Carpim carpim = new Mat::Matematik.Carpim();
Mat::Matematik.Toplam toplam = new Mat::Matematik.Toplam();
Mat2::Matematik.Carpim carpim2 = new Mat2::Matematik.Carpim();
Mat2::Matematik.Toplam toplam2 = new Mat2::Matematik.Toplam();
}
}
}
Aynı şekilde Matematik isim alanını using ile aşağıdaki şekilde bildirebiliriz;
using Mat::Matematik;
using Mat2::Matematik;
Diyorum ve noktayı koyuyorum, iyi programlamalar
