18 Ekim 2014 Cumartesi

Dinamik Diller

C#
.Net 4.0 ile gelen Dynamic Language Runtime ile dinamik dillere mahsus bazı özellikleri C# ile kullanabilmek mümkün.

ExpondoObject
dynamic yazısına taşıdım.

dynamic anahtar kelimesi
C# ile gelen dynamic kelimesi ile static type kontrollerinden bir nebzeye kadar kurtulabilmek mümkün. Bu kelime Python gibi diller ile C#'ın etkileşime geçebilmesi için eklendi.

dynamic kelimesi Visitor örüntüsünü çok daha kısa ve kolay hale getiriyor.

dynamic kelimesi Property'ler için kullanılabilir. Örnek'te bir çok farklı tipten nesneyi döndüren Val metodu var. Döndürülen nesnelerin ToString () metodları olduğu için hepsi consola yazılabiliyor.

using System;
using System.Collections.Generic;

abstract class A
{
    public abstract dynamic Val { get;   set; }

}
class B : A
{
    public override dynamic Val { get;  set; }
}
class C : A
{
    public override dynamic Val { get;  set; }
}
class D : A
{
    public override dynamic Val { get;  set; }
}

class Program
{
    static void Main(string[] args)
    {
        var list = new List<A> { new B(), new C(), new D() };
        // ... 

        foreach (A item in list)
        {
            Console.WriteLine(String.Format("Value is: {0}", item.Val));
        }
    }
}

dynamic olarak alınan bir nesnene erişirken her zaman RuntimeBinderException'a dikkat etmek gerekir. Örnek:
void WriteClassDetails(dynamic instance)
    {
        try
        {
           Console.WriteLine(instance.Property);
           instance.Method();
        }
        catch (RuntimeBinderException ex)
        {
            ErrorWriters.WriteRuntimeBinderException(ex);
        }
    }

Hiç yorum yok:

Yorum Gönder