Bildiğiniz üzere .Net Framework 4.0 ile birlikte gelmesi muhtemel en köklü yenilikler arasında Dynamic Language Runtime alt yapısı yer almaktadır. Bu anlamda daha önceden dynamic anahtar kelimesini inceleyerek tiplerin dinamik olarak oluşturulup kullanılmasını kavramaya çalışmıştık. Bu yazımızda ise, nasıl bir yenilikten bahsedeceğimizi anlatabilmek için öncelikle aşağıdaki kod parçasına odaklanmanızı istiyorum.
Not : Örnek henüz yayınlanmış olan Visual Studio 2010 Ultimate Beta 2 sürümü üzerinde geliştirilmiş bir Console uygulamasıdır.
- Kod:
-
Console.WriteLine("İlk Bakış\n");
dynamic employee = new ExpandoObject();
employee.Name = "Burak";
employee.Salary = 1000.23F;
employee.Birth = new DateTime(1976, 12, 4);
employee.WorkingArea = new ExpandoObject();
employee.WorkingArea.City = "Istanbul";
employee.WorkingArea.Degree = 1;
employee.WorkingArea.CustomerCount = 190;
Console.WriteLine(String.Format("\tName:{0} City:{1} Degree:({2})", employee.Name, employee.WorkingArea.City, employee.WorkingArea.Degree));
Şimdi bu kod parçası ile ilişkili olara bir kaç ipucu vermek istiyorum;
Öncelikli olarak uygulamamızda Name,Salary ve diğer özelliklere sahip Employee gibi ismi olan herhangibir tip(type) tanımı bulunmamaktadır
İkinci kodu yazdığımız sırada employee isimli değişkene herhangi bir özellik eklemek istediğimizde aşağıdaki bilgi penceresi ile karşılaşırız.
ExpandoObject tipinin aslında hangi amaçla kullanıldığını ilk etapta görmüş olduk. Peki daha neler yapabiliriz? Örneğin bir liste veya dizi oluşturulmasında, ExpandoObject nesnelerini kullanabilir miyiz? İşte cevabımız;
- Kod:
-
Console.WriteLine("\nNesne Topluluğu\n");
dynamic personList = new List<dynamic>();
personList.Add(new ExpandoObject());
personList[0].Name = "Burak";
personList[0].Salary = 1000;
personList.Add(new ExpandoObject());
personList[1].Name = "Bill";
personList[1].Salary = 1250;
personList.Add(new ExpandoObject());
personList[2].Name = "Eva";
personList[2].Salary = 1050;
personList.Add(new ExpandoObject());
personList[3].Name = "Mayk";
personList[3].Salary = 900;
foreach (var person in personList)
Console.WriteLine("\t{0}\t{1}", person.Name, person.Salary);
Bu sefer List<dynamic> tipinden bir koleksiyon oluşturulduğu ve koleksiyonun her bir nesnesinin ExpandoObject tipinden tanımlandığı görülmektedir. Buna göre örnek olarak Name ve Salary özellikleri olan nesnelerin dynamic listeye eklendiği görülebilir. Tabiki her öğe oluşturulma işleminden önce koleksiyona ExpandoObject tipinden bir nesne örneği eklenmesi gerekmektedir
Hatta istersek çalışma zamanında oluşturulacak bu nesneler üzerinde LINQ sorgularının çalıştırılmasını da sağlayabiliriz. Aşağıdaki kod parçasında yukarıdaki listenin bir LINQ ifadesi ile sorgulandığı görülmektedir.
- Kod:
-
Console.WriteLine("\nLINQ Kullanımı\n");
var result = from person in (personList as List<dynamic>)
where person.Salary <= 1000
select person;
foreach (var r in result)
Console.WriteLine("\t{0}\t{1}", r.Name, r.Salary);