Date Image Saturday, February 13, 2010 | Kategoriler | Asp.Net, C#, Tümü

.Net Framework 4 Dynamic İle Reflectiona Gerek Kalmadan Nesneler Oluşturmak Ve Çözümlemek

   Bu yazıda .Net Framework 4 ile birlikte gelen dynamic tipini kısaca inceleyeceğim. Daha önce yazmış olduğum İsimsiz Tipler(Anonymous Types) makalesinde ”var” keywordü ile yeni bir nesne oluşturuduktan sonra bu nesnenin özelliklerinin kullanılması için Reflection dan yararlanmak zorunda kaldığımızı anlatmıştım.

   Şimdi ise .Net Framework 4 ile birlikte bu işlemlere gerek kalmadan runtime(çalışma zamanı) da veriyi çözümleyebilen bir tip olan “dynamic” i göstermeye çalışacağım. Bu makaleyi  iş,sınavlar  vs. dolayısıyla  yayınlamakta biraz geç kalsam da, merak edilen önemli bir konu olduğunu düşünerek faydalı olacağını düşünüyorum.

   Konu ile ilgili Visual Studio 2010’da bir console uygulaması hazırladım. Basit bir örnek olarak, bir kullanıcı oluşturup bu kullanıcının bilgilerini göstermeyi seçtim.

   Öncelikle eski bilgilerimizi hatırlamak adına, kullanıcıyı oluşturmak ve ekrana basmak için Reflection dan yararlanacağım daha sonra da dynamic tip ile aynı durumu oluşturmaya çalışacağım.

namespace DotNetFramework4DynamicTypes

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.Write("Current User : {0}", GetUserName(GetCurrentUser()));

            Console.ReadKey();

        }

 

        static object GetCurrentUser()

        {

            var user = new { Id = 1, Name = "Serdar", Surname = "Sert", UserName = "serdar" };

            return user;

        }

 

        static string GetUserName(object user)

        {

            Type type = user.GetType();

            return type.GetProperty("Name").GetValue(user, null).ToString();

        }

    }

}

 

   Buraya kadar yaptığımız işlemleri tekrarlarsak eğer;” GetCurrentUser” adı ile dönüş tipi object olan bir metot yazdık ve içerisinde var ile yeni bir nesne oluşturup Id,Name,Surname ve UserName propertylerini oluşturduk.

 

   “GetUserName” adında dönüş tipi string olan ve object tipinde(user nesnemizi alacak) parametre alan bir metot oluşturduk. Bu metotu oluşturmamızın nedeni var ile tanımladığımız nesnelerin, özelliklerine direkt erişemememizdir. Bu nedenle bu metot içerisinde parametre olarak aldığımız object tipindeki nesneyi çözümlemek için biraz reflection yaptık ve ”Name” property sini alarak return ile dönmesini sağladık.

 

   Son olarak da Main metodumuzda GetUserName metoduna GetCurrentuser dan gelen user ı vererek gelen string değeri ekrana bastık. Çıktı olarak ekrana, “Current User : Serdar” yazacaktır.

 

   Şimdi ise .Net Framework 4 ile birlikte gelen dynamic tipini kullanarak yeni bir nesne oluşturup nasıl çözümleyebileceğimize bir bakalım.

 

namespace DotNetFramework4DynamicTypes

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.Write("Current User : {0}", GetCurrentUser().Name);

            Console.ReadKey();

        }

 

        static dynamic GetCurrentUser()

        {

            dynamic user = new { Id = 1, Name = "Serdar", Surname = "Sert", UserName = "serdar" };

            return user;

        }

    }

}

 

   Görüldüğü gibi, “dynamic” ile işimiz çok daha kolaylaşıyor. Çünkü bizim reflection ile yapmaya çalıştığımız işlemlere benzer işlemleri runtimeda kendisi yapıyor artık. Bizim yaptığımız tek şey dynamic tipinde bir nesne oluşturmak ve özelliklerini belirlemek. Artık oluşturduğumuz nesnenin, tüm özelliklerini hata almadan yazabiliyoruz. GetCurrentUser metodundan gelen user nesnesinin Name propertysine kolayca ulaşabiliyoruz.

 

   İlerleyen günlerde fırsat buldukça .Net Framework 4 ile ilgili makaleler yazmaya çalışacağım. Esen kalın..

Etiketler :