Вызов статической функции из базового базового класса массива типов

Почему бы не работать следующим образом?

Предполагая, что System.Type[] allGUIMenuTypes определен, базовый класс определяется как

public class GUIMenu

И я хочу использовать его как этот псевдокод: (Edit: я не знаю, какой мод поместил эту строку здесь, но это не псевдокод, это фактический код)

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

(Не обращайте внимания на "поддельный" стиль linq ForEach, мой вопрос относится к GUIMenu)

В качестве альтернативы я также попытался вызвать эту статическую функцию с помощью отражения и застрял, пытаясь понять, какие остальные параметры должны быть....

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

В основном, чтобы объяснить себя дальше, у меня есть массив типов, базовым типом которого является общий класс GUIMenu. Мне нужно вызвать статическую функцию Close() из базового класса каждого из этих типов.

1 ответ

Данный:

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

class Derived1 : BaseClass<int> { }

class Derived2 : BaseClass<******> { }
</******></int></t>

Работает следующий подход к размышлению:

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);
}

licensed under cc by-sa 3.0 with attribution.