Saturday, April 17, 2010

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 da
typeof(dynamic)== typeof(object) size true değerini verir, hata almazsınız. Aynı şekilde

typeof (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); // String
x = 123; // hata vermez !
Console.WriteLine (x.GetType().Name); // Int32

Gö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 string
var y = "aleykum selam"; // Static tip  string, runtime tipi de string
int i = x; // run-time hatası
int j = y; // compile-time hatası alırız...

Saturday, April 17, 2010 4:51:40 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 

© Copyright 2009, Süleyman PETEK