C# dynamic vs object farki

object --> Genel veri tipi. Tip dönüşümlerinde oluşan hatalar derleme esnasında gözardı edilerek çalışma zamanında hata üretilir.
dynamic --> Genel veri tipi. Tip dönüşümlerinde oluşan hatalar derleme esnasında herhangi bir kontrol yapılmadığı için hata üretilmez.

Not: dynamic veri türü C# 4.0' a ait bir veri türü olduğundan dolayı dynamic veri türünü kullanacağımız projelerde Framework 4.0 versiyonunu seçmelisiniz.

Örnek (1)

static void Main(string[] args)
{
object sayi=20;
Console.WriteLine(sayi.GetType());
Console.ReadKey;
}

Örnek çalıştırıldığında System.Int32 sonucunu verecektir. Object veri türü tanımlanan değişkene atanan değere göre değişkenin tipini belirlemektedir.

Örnek (2)

static void Main(string[] args)
{
dynamic sayi=20;
Console.WriteLine(sayi.GetType());
Console.ReadKey;
}

bu örnekte de aynı object'deki gibi System.Int32 sonucunu verecektir.

Ornek (3)

static void Main(string[] args)
{
object sayi=20;
sayi=sayi + 20;
Console.WriteLine(sayi);
Console.ReadKey;
}

örneği çalıştırdığımızda ise "Operator '+' cannot be applied to operands of type 'object' or 'int'" biçiminde hata üretilecektir. object ile Int32 türüne dönüşüm olduğu halde işlem gerçekleşmemektedir.

Örnek (4)

static void Main(string[] args)
{
object sayi=20;
sayi=(int)sayi + 20;
Console.WriteLine(sayi);
Console.ReadKey;
}

bu şekilde belittiğimizde ise hata meydana gelmeyecek ve işlem gerçekleşecektir.

Örnek (5)

static void Main(string[] args)
{
object sayi=20;
sayi=(double)sayi + 20;
Console.WriteLine(sayi);
Console.ReadKey;
}

Ancak yukarıda görüldüğü gibi başka bir veri türüne dönüşüm işlemi yapıp toplama işlemi gerçekleştirdiğimizde derleme esnasında herhangi bir hata mesajı görüntülenmeyip çalışma esnasında "Specified cast is not valid." biçiminde dönüşümhatası meydana gelir.

Örnek (6)

static void Main(string[] args)
{
dynamic sayi=20;
sayi=(double)sayi + 20;
Console.WriteLine(sayi);
Console.ReadKey;
}

Aynı işlemi dynamic veri tipi ile gerçekleştirdiğimizde ise oluşan hatalar göz ardı edilecektir.

Kaynak: Visual Studio 2010 ile C#
Volkan Aktaş


Hiç yorum yok:

Yorum Gönder