3 Şubat 2014 Pazartesi

Generics ve Kalıtım


Alt sınıfta Tekrar Üst Sınıfa Cast Etmek
Bu problem her hangi bir dilde de karşımıza çıkabilir. Probleme verilen genel bir isim var mı bilmiyorum. Ancka çözüm hemen hep aynı oluyor.

Alt sınıf kendisini kullanarak generic bir metodu çağırınca artık üst sınıfın bilgisi kaybedildiği için problem olabiliyor. Bu durumda üst sınıfın bilgisini de alt sınıfa geçmek gerekir. Aşağıdaki örnekte AbstractClass içinden Connection.Update (this) çağrılsaydı Connection sınıfı sadece Abstract class'ı bilecekti.

C#
Aşağıdaki örnekte üst sınıf kendi bilgisini kaybetmeden Connection.Update metoduna geçebiliyor.

abstract class AbstractClass<T>
where T: AbstractClass<T> //restrict T as a child of AbstractClass<T>
{
    bool update()
    {
        Connection.Update<T>(this as T);
    }
}

class Entity : AbstractClass<Entity>
{
}

class Connection
{
    public static void Update<T>(T obj)
    {
        someMethod<T>()
    }
}

Hiç yorum yok:

Yorum Gönder