C# 在执行运行时程序集加载时,如何仅查找声明的方法?
我正在进行运行时程序集加载,但我不知道任何类或方法的名称。我不想列出程序集中的所有类及其声明的方法,而不是从System.Object继承的类 代码如下:C# 在执行运行时程序集加载时,如何仅查找声明的方法?,c#,.net,reflection,assemblies,load,C#,.net,Reflection,Assemblies,Load,我正在进行运行时程序集加载,但我不知道任何类或方法的名称。我不想列出程序集中的所有类及其声明的方法,而不是从System.Object继承的类 代码如下: string str = ""; Assembly assembly = Assembly.LoadFile(@"c:\components.dll"); foreach (Type type in assembly.GetTypes()) { if (type.IsClass == true) {
string str = "";
Assembly assembly = Assembly.LoadFile(@"c:\components.dll");
foreach (Type type in assembly.GetTypes())
{
if (type.IsClass == true)
{
str += type.Name + "\n";
MethodInfo[] methodInfo = type.GetMethods(BindingFlags.DeclaredOnly);
foreach (MethodInfo mi in methodInfo)
{
str += "\t" + mi.Name + "\n";
}
}
}
MessageBox.Show(str);
这是components.dll:
public class component01
{
public string myName = "component01";
public string getMyName()
{
return myName;
}
}
public class component02
{
public string myName = "component02";
public string getMyName()
{
return myName;
}
}
结果是:
component01
component02
And if i remove the bindingflag:
component01
getMyName
ToString
Equals
GetHashcode
GetType
component02
getMyName
ToString
Equals
GetHashcode
GetType
我只想显示
getMyName
方法。我想您正在查找标志:
BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly
您可能需要输入BindingFlags.NonPublic,具体取决于您的需求
我还想指出,通过更深入的继承层次结构,类型可以从基本类型继承成员,而不是System.Object
。如果您想保留这些,而不是最初在对象上声明的,您可以:
删除BindingFlags.DeclaredOnly
标记,用于GetMethods
调用李>
仅包括以下方法:
methodInfo.GetBaseDefinition().DeclaringType != typeof(object)
当然,如果“已声明”方法的定义更为复杂,您可能需要使用不同的筛选器。非常有效,谢谢!我以前尝试过使用Public和DeclaredOnly,但都不起作用。为什么我需要指定这三个呢?@Bildsoe:System.Reflection.BindingFlags
是一个标志枚举。当未设置实例
标志时,GetMethods
不包括实例方法。好的,谢谢。我只是想,如果该方法是所提到的任何一种方法,它都会被包含。@Bildsoe:是的,它有点不直观,不是吗?实例
作为一个包含过滤器工作,但是DeclaredOnly
是独占的。是的,有点。当然,当阅读MSDN上的文档时,我可以看到这里描述了它。