Bil*_*soe 8 .net c# reflection load assemblies
我正在进行运行时程序集加载,但我不知道任何类或方法的名称.我不想用我们声明的方法列出我的程序集中的所有类,而不是从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);
Run Code Online (Sandbox Code Playgroud)
这是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;
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
component01
component02
And if i remove the bindingflag:
component01
getMyName
ToString
Equals
GetHashcode
GetType
component02
getMyName
ToString
Equals
GetHashcode
GetType
Run Code Online (Sandbox Code Playgroud)
我只想要显示的getMyName方法.
Ani*_*Ani 11
我想你正在寻找旗帜:
BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly
Run Code Online (Sandbox Code Playgroud)
您也可以BindingFlags.NonPublic根据自己的要求加入.
我还要指出,对于更深层次的继承层次结构,类型可以从除基类之外的 基类继承成员System.Object.如果你想保留那些,而不是最初声明的那些object,你可以:
BindingFlags.DeclaredOnly标志GetMethods.仅包括以下方法:
methodInfo.GetBaseDefinition().DeclaringType != typeof(object)
Run Code Online (Sandbox Code Playgroud)当然,如果"声明"方法的定义更复杂,则可能需要使用不同的过滤器.
| 归档时间: |
|
| 查看次数: |
3774 次 |
| 最近记录: |