2011-12-08 174 views
2

直指點。比方說,我有一個簡單的繼承模型泛型繼承和代表

class Base {} 
class Inh : Base {} 

,我想這樣做(注意 - 此代碼不能編譯):

class Test 
{ 
    private Dictionary<Type, Action<Base>> dict; 

    public Test() 
    { 
     dict = new Dictionary<Type, Action<Base>>(); 
    } 

    public void Test(Inh inh) 
    { 
    } 

    public void Add<T>(Action<T> callback) 
     where T : BasePackage 
    { 
     dict.Add(typeof(T), callback); 
    } 
} 

主要思想是使用字典作爲函數調用者。例如,如果我加入了Test FUNC作爲回調,我以後可以做這樣的事情:

dict[typeof(Inh)](new Inh()); 

可惜我找不到自己,所以我要求幫助soulution。如果任何人有任何建議,將不勝感激。

+0

我有一種感覺,你可能會從錯誤的方向接近這一點。 –

+0

爲什麼要混合繼承+功能表? –

+2

這裏的實際目標是什麼?你打算如何使用它? –

回答

4

您可以這樣做來強制類型。請注意,如果您查詢並調用錯誤類型的委託,則可能會在運行時失敗(由於投射無效)。這種可能的失敗情況是爲什麼這不符合委託使用中的自動反對條件。

public void Add<T>(Action<T> callback) 
     where T : Base 
    { 
     dict.Add(typeof(T), Base b => callback((T)b)); 
    } 
+0

這很好用! – Milcho