【发布时间】:2014-01-07 17:01:39
【问题描述】:
我目前正在尝试获得一组非常具体的方法,但未能如愿。 我需要从实现某个接口的所有类中获取与某个签名匹配的所有方法。
到目前为止我得到的是:
IEnumerable<System.Type> classes = Assembly.GetAssembly(typeof(IActionMethod)).GetTypes().Where(x => x.GetInterface("IActionMethod") != null);
MethodInfo[] methods;
List<MethodInfo> relevant;
ParameterInfo[] parameters;
foreach(System.Type cls in classes)
{
methods = cls.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public);
relevant.Clear();
for(int i = 0; i < methods.Length; i++)
{
parameters = methods[i].GetParameters();
if(parameters.Length == 1 && parameters[0].GetType() == typeof(GameObject) && methods[i].ReturnType == typeof(void))
relevant.Add(methods[i]);
}
}
此代码在GetMethods(..) 处已失败,未返回任何方法。
我不明白的是,如果它们不实现接口,我可以接收任何相关类的所有公共方法。
接口本身不包含任何东西,我只是用它来“标记”相关的类,因为我想不出任何其他解决方案来做到这一点。
谁能告诉我为什么界面呈现GetMethodsuseless 或者指出我上面代码中的错误?
【问题讨论】:
-
请给出一个简短但完整的例子。请注意,您在每次迭代时都会完全清除
relevant列表 - 您确定要这样做吗?
标签: c# reflection interface