C#’ta Anonymous Type
Merhaba,
Şuana kadar birçok makalemde örneklendirmelerde kullandığım yahut üzerine üç beş satır kalem oynattığım bir yapı olan Anonymous Type hakkında daha detaylı bir içerik oluşturacağız.
Biliyoruz ki, sınıflarımız belirli organize veriler üzerine kurgulanan bir yapıdır. Haliyle tanımladıysak eğer kullanılmak üzere bu zahmete girmişiz demektir 🙂 Ee peki sadece bir seferlik kullanılacak durumlar için sınıf oluşturmak ne kadar doğrudur? Tabi ki de doğru değildir. Anonymous Type(İsimsiz Tip) ile bu işlemi gerçekleştirmemiz daha doğru olacaktır.
static void Main(string[] args) { var Kisi = new { Adi = "Gençay", SoyAdi = "Yıldız" }; }
Gördüğünüz gibi bir Kisi sınıfı olusturmak yerine Anonymous Type kullanarak bu işi halletmiş bulunmaktayım. Burada dikkat etmeniz gereken nokta, Anonymous Type kullanırken var değişkenine atama gerçekleştirmeniz gerekmektedir. var tipi kullanılırken Compiler, Run Time(Çalışma Zamanı)’da atanan yapının tipini belirlemekte ve var tipinide o tipe büründürmekteydi. Ee haliyle Anonymous Type yapısının tipini bilemeyeceğimizden dolayı doğal olarak var tipini kullanmamız en doğrusudur.
Yukarıdaki ekran görüntüsünden de görüldüğü gibi Anonymous Type propertyleri default construtorda tanımlayıp readonly olarak ayarlanmaktadır.
Peki Compiler Anonymous Type’ı Hangi Tipe Çeviriyor?
Bu sorunun cevabını aşağıdaki işlemlerden elde edebiliriz.
static void Main(string[] args) { var Kisi = new { Adi = "Gençay", SoyAdi = "Yıldız" }; object obje = Kisi; Console.WriteLine ($"Obje Adı = {obje.GetType().Name}\nKalıtım Alınan Sınıf = {obje.GetType().BaseType}\nPropertyler = {obje.ToString()}"); Console.Read(); }
Gördüğünüz gibi Compiler arka planda <>f__AnonymousType0`2 isminde bir sınıf yaratmakta ve bu sınıfı
System.Object sınıfından türetmektedir. Aslında bu üretilen sınıf bir sealed sınıftır. Anonymous Type sınıfların ismi Compiler tarafından herseferinde farklı ve unique(tekil) bir şekilde verilmektedir. O yüzden kendi çalışmanızda farklı bir isimle karşılaşırsanız şaşırmayınız. Ayriyetten bu projede Anonymous Type’a özel <>f__AnonymousType0`2 tipi oluşturulduğundan dolayı, tüm Anonymous Type’larda da <>f__AnonymousType0`2 tipinden nesne oluşturacaktır.
Basit ama etkili bir yaklaşım sergilememizi sağlayan Anonymous Type lüzumsuz sınıf ve nesne yapılarından bizleri kurtarmakta ve projenin amacına daha az maliyetle hizmet etmemizi sağlamaktadır.
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…