2013-10-16 52 views
0

爲什麼以下工作不起作用?從類型數組的通用基類中調用靜態函數

假設System.Type[] allGUIMenuTypes定義是基類定義爲

public class GUIMenu<T> 

而且我想使用這樣的僞代碼:(編輯:我不知道,但它是什麼國防部把這一行這裏不是僞代碼,它是實際的代碼)

allGUIMenuTypes.ForEach(t => GUIMenu<t>.Close()); 

(不要不搭理「假」 LINQ風格的ForEach,我的問題是關於GUIMenu<t>

阿爾特rnatively我也嘗試過使用反射來調用這個靜態函數和被困試圖找出其餘參數應該是什麼....

allGUIMenuTypes.ForEach(T => T.BaseType.GetGenericTypeDefinition() 
            .InvokeMember("Close", 
            BindingFlags.Static | BindingFlags.Public...... 

基本上進一步解釋我自己,我有類型,其數組基類型爲 泛型類GUIMenu<T>。我需要從每種類型的基類中調用靜態函數Close()

+0

哪一個類定義了'關閉()'? – SLaks

+0

您應該只是介紹GUIMenu 實現的非泛型基類或接口。 –

+0

發佈重現問題的示例。這將幫助我們回覆 –

回答

1

考慮:

class BaseClass<T> 
{ 
    public static void Close() 
    { 
     Console.WriteLine("Closing " + typeof(T).Name); 
    } 
} 

class Derived1 : BaseClass<int> { } 

class Derived2 : BaseClass<double> { } 

下反射方法的工作原理:

var types = new[] {typeof(Derived1), typeof(Derived2)}; 

foreach (var type in types) 
{ 
    var method = type.BaseType.GetMethod("Close", BindingFlags.Public | BindingFlags.Static); 
    method.Invoke(null, null); 
} 
相關問題