Compile zamanında hata vermeyen ama eğer yanlış ya da mantıksız kullanılırsa run-time da hata veren yepyeni bir tipimiz var artık.Örneğin;dynamic x= 7;x.SayHello(); // gibi bir durumda run-time hatası alırız...ama mesela şöyle aritmetik ortalama yapan bir program parçası için düşündüğümüzde ise gayet kullanışlı olabilir;static dynamic ortalama(dynamic x, dynamic y){return (x + y) / 2;}static void Main(){int x = 3, y = 4;Console.WriteLine (ortalama(x, y));}burada kazancımız nedir ? açıkça görebiliriz ki er sayı tipi için ayrı bir metot yazmamıza gerek kalmıyor...dynamic ve object tipleri aslında birbirlerine çok çok benzerler, öyle ki run-time datypeof(dynamic)== typeof(object) size true değerini verir, hata almazsınız. Aynı şekildetypeof (List<dynamic>) == typeof (List<object>)typeof (dynamic[]) == typeof (object[])ifadeleri için de geçerlidir...Object referansında olduğu gibi, dynamic tipini de herhangi bir object tipine refere edebiliriz;dynamic x = "selam";Console.WriteLine (x.GetType().Name); // Stringx = 123; // hata vermez !Console.WriteLine (x.GetType().Name); // Int32Gördüğünüz gibi yapısal olarak object referanslamadan hiçbir farkı yok... Bu şekilde dinamik operasyonlara müsade eden yapılar kurabiliriz ;object o = new System.Text.StringBuilder();dynamic d = o;d.Append ("selam");Console.WriteLine (o); // selam !Bir diğer konu da,public class Test{public dynamic Foo;}metodunun aşağıdaki metotla aynı olması,public class Test{[System.Runtime.CompilerServices.DynamicAttribute]public object Foo;}Buradaki avantajımız, dynamic tipini desteklemeyen dillerde, kullanıcılar/developerlar object nesnesi kullanarak yollarına devam edebilirler...Peki bizim var diye bir tipimiz de var, onunla arası nasıl bu dynamic in diye bakacak olursak;• var şöyle der, “tipin değerlendirmesini derleyiciye(compiler) bırakalım”• dynamic de şöyle der, “yokabi gerek yok,tipin değerlendirmesini biz çalışma zamanına bırakalım(run-time)”dynamic x = "selam"; // Static tip dynamic, runtime tipi ise stringvar y = "aleykum selam"; // Static tip string, runtime tipi de stringint i = x; // run-time hatasıint j = y; // compile-time hatası alırız...
Remember Me
© Copyright 2009, Süleyman PETEK