C# 5.0 Caller Information
Bu yazımda C# 5.0 ile gelen Caller Information özelliğine değineceğiz.Caller Information(Çağıran Özellikleri) nedir kısaca özetlemek gerekirse, cümlenin Türkçe telafuzu bir nevi ip ucu vermektedir.Bir metodun nereden(hangi metod tarafından) çağrıldığı bilgisine ulaşabilmemizi sağlayan yapıdır.Bu yapının kullanım alanlarına değindikten sonra programatik yapısını inceleyelim.
Herhangi bir işlem için oluşturduğumuz bir fonksiyonu projemizin çoğu yerinde çağırıp kullandığımızı farz edelim.Proje derlenip çalıştığı aşamada fornksiyonumuz içerisinde bir hata verirse eğer, nerede hata aldığımızı zor kestirebiliriz.Çünkü çoğu yerde bu fonksiyonu kullandığımızdan dolayı hangi kod dosyasında olduğunu, hangi metod da ya da hangi satırda olduğunu bulabilmek için debug modunda çalıştırıp satır satır incelemeniz gerekmektedir.
İşte bu gibi durumların üstesinden rahat bir şekilde gelebilmek için Caller Informations ile fonksiyonumuzu tam olarak satır numarasından tutun dosya yoluna kadar, nereden(hangi metoddan) çağrıldığı bilsine ulaşabiliriz.
Şimdi programatik olarak konuyu irdelememize devam edelim.
Caller Info öz niteliğine eklenmiş 3 farklı özellik bulunmaktadır.Bu özellikler; “CallerMemberName”, “CallerFilePath” ve “CallerLineNumber” özellikleridir.
Bu özellikleri açıklayalım.
CallerMemberName : Bu özelliğin kullanıldığı metod, hangi metod tarafından çağrılıyorsa, o metodun ismini döner.
CallerFilePath : Bu özelliğin kullanıldığı metod, hangi metod tarafından çağrılıyorsa, o metodun dosya yolunu gönderir.
CallerLineNumber : Bu özelliğin kullanıldığı metodun, satır numarasını döner.
Bu üç özelliği kullanarak, fonksiyonumuzun parametrelerine Attribute olarak tanımlamamız bu bilgilere erişmemiz için yeterlidir.Bu özellikler, “System.Runtime.CompilerServices” kütüphanesi altında bulunmaktadır.
static void Main(string[] args) { OrnekMetod("Örnek çalışan metod."); } static void OrnekMetod(string GelenDeger, [CallerMemberName]string MetodAdi = "", [CallerFilePath]string MetodYolu = "", [CallerLineNumber]int MetodSatirYolu = 0) { Console.WriteLine("Çağıran Metodun Adı : " + MetodAdi); Console.WriteLine("Çağıran Metodun Yolu : " + MetodYolu); Console.WriteLine("Çağıran Metodun Satır Numarası : " + MetodSatirYolu); Console.WriteLine("Gelen Değerimiz : " + GelenDeger); Console.Read(); }
Yukarıdaki kodu derleyip çalıştırdıktan sonra aşağıdaki gibi çıktı alıyoruz.
Gördüğünüz gibi “OrnekMetod” adındaki metodum “Main” metodu içerisinden çağrılıyor.Caller Info öznitelikleri bizlere “Main” metoduyla ilgili istediğimiz bilgileri sunuyor.
Son olarak dikkat etmemiz gereken bir husus var.Oluşturduğumuz metod, basit bir şekilde bir property(özellik) ya da bir metod içinde kullanılıyorsa, o metodların isimleri neyse gönderecektir.Eğer Constructor(Yapıcı metod) gibi özel metodlar içerisinde çağırılırsa, bu sefer “CallerMemberName” özellikleri “.ctor” ismini geri dönecektir.
Örnek olarak, “Matematik.cs” adında bir sınıf oluşturdum ve içini aşağıdaki gibi oluşturuyorum.
class Matematik { public Matematik() { Topla(2, 4); } static void Topla(int Sayi1, int Sayi2, [CallerMemberName]string MetodAdi = "", [CallerFilePath]string MetodYolu = "", [CallerLineNumber]int MetodSatirYolu = 0) { Console.WriteLine("Çağıran Metodun Adı : " + MetodAdi); Console.WriteLine("Çağıran Metodun Yolu : " + MetodYolu); Console.WriteLine("Çağıran Metodun Satır Numarası : " + MetodSatirYolu); Console.WriteLine("Toplam : " + (Sayi1 + Sayi2)); Console.Read(); } }
Gördüğünüz gibi, “Matematik” sınıfının Constructor’ından Topla metodumuz çağrılmaktadır.Şimdi “Program.cs” sınıfında “Main” metodu üzerinde bu sınıftan bir nesne oluşturalım.
static void Main(string[] args) { Matematik Topla = new Matematik(); }
Matematik sınıfından bir nesne oluşur oluşmaz yapıcı metod devreye girecek ve “Topla” metodu çalıştırılacaktır.
Çıkan sonuç aşağıdaki gibi olacaktır.
Gördüğünüz gibi “.ctor” ismi gelmektedir.
Constructor gibi diğer özel metodların da, “CallerMemberName” Attribute’unun yakalayacağı isimler için aşağıdaki tabloya göz atalım.
Çağırılan yapı |
Gelen isim |
Metod, özellik(property), olay(metod) | Direkt kullanılan yapının ismi döner. |
Constructor(Yapıcı metod) | “.ctor” ismi döner. |
Static Constructor(Static yapıcı metod) | “.cctor” ismi döner. |
Yok edici metod. | “Finalize” ismi döner. |
Kullanıcı tanımlı operatör ya da bir çevirme işlemi | “op_Addition” ismi döner. |
Attribute Constructor(Öznitelik Yapıcısı) | Öz niteliğin uygulandığı yani kullanıldığı üyenin adı dönecektir. Eğer öznitelik bir üyenin içindeki bir eleman ise (bir parametre, geri dönüş değeri veya bir generic tip parametresi) yine üyenin adı sonuç olarak üretilecektir. |
Tiplere uygulanmış bir öznitelik veya bir assanbly-level tarafından çağrılmış ise | Parametrenin varsayılan değeri döndürülecektir. |
C# 5.0 ile Caller Information’ın programlama hayatımıza kattığı güzellikleri incelemiş olduk.Bol bol faydalanmanız dileğiyle…
İyi çalışmalar..
object? obj, object? value, object?[]? index hocam konuyla alakası yok. bu üç parametreyi okuyamıyorum. tab olarak hangi değerleri istiyor cevaplarsanız çok sevinirim