8
私はランタイムアセンブリの読み込みを行っていますが、クラスやメソッドの名前はわかりません。私は、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
方法をしたいです。
完璧に動作します、ありがとう!以前はPublicとDeclaredOnlyの両方を使ってみましたが、これはうまくいきませんでした。どのように私は3つすべてを指定する必要がありますか? – Bildsoe
@Bildsoe: 'System.Reflection.BindingFlags'はフラグenumです。 'Instance'フラグがセットされていないとき、' GetMethods'はインスタンスメソッドを含みません。 – Ani
よろしくお願いいたします。私はちょうどその方法が記載されていれば、それが含まれると思った。 – Bildsoe