gpt4 book ai didi

c# - 在执行运行时程序集加载时,如何仅查找声明的方法?

转载 作者:太空狗 更新时间:2023-10-29 18:25:49 24 4
gpt4 key购买 nike

我正在执行运行时程序集加载,但我不知道任何类或方法的名称。我不想列出程序集中的所有类及其声明的方法,而不是那些从 System.Object 继承的类。

这是代码:

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 的基类型继承成员。如果你想保留那些,而不是最初在 object 上声明的那些,你可以:

  1. 删除 GetMethods 调用的 BindingFlags.DeclaredOnly 标志。
  2. 仅包括以下方法:

    methodInfo.GetBaseDefinition().DeclaringType != typeof(object)

当然,如果您对“已声明”方法的定义更复杂,您可能需要不同的过滤器。

关于c# - 在执行运行时程序集加载时,如何仅查找声明的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4814186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com