我有一个像这样的嵌套类结构
public static class Animals{
private static class Dolphins
{
public static int GetAge()
{
}
}
private static class Cats
{
public static int GetAge()
{
}
}
private static class Dogs
{
public static int GetAge()
{
}
}
}
是否可以在for循环中以编程方式获取子类名称,所以我可以为所有这些子类调用GetAge()方法?像这样(伪代码):
foreach(subclass in Animals)
{
subclass.GetAge()
}
我通过反射进行了尝试,但是我能够获得基类的后代类,而不是像上面的静态基类中嵌套的类。
预先感谢
答案 0 :(得分:5)
foreach(var type in typeof(Animals).GetNestedTypes(
BindingFlags.Public | BindingFlags.NonPublic))
{
var method = type.GetMethod("GetAge", BindingFlags.Static | BindingFlags.Public,
null, Type.EmptyTypes, null);
if (method != null)
{
int age = (int)method.Invoke(null, null);
Console.WriteLine(age);
}
}
答案 1 :(得分:2)
您将希望获得Nested Types。
GetNestedTypes(BindingFlags)
在派生类中重写时,使用指定的绑定约束搜索嵌套在当前Type中的类型。
然后使用Static Binding Flag。
指定用于控制绑定的标志以及通过反射进行成员和类型搜索的方式。
静态-指定要在搜索中包括静态成员。
答案 2 :(得分:1)
如前所述,使用界面会更合适。但是无论如何,这是您所要求的单行实现:
typeof(Animals).GetNestedTypes(BindingFlags.Static | BindingFlags.NonPublic).ToList()
.ForEach(t => /*do something with the returned value*/t.GetMethod("GetAge", BindingFlags.Static | BindingFlags.Public)?.Invoke(null, null));