Robię ładowanie zestawu środowiska wykonawczego, ale nie znam nazw żadnych klas ani metod. Nie będę wymieniał wszystkich klas w moim zestawie z zadeklarowanymi metodami, a nie dziedziczonych z System.Object.Jak znaleźć tylko deklarowane metody podczas ładowania zestawu środowiska wykonawczego?
Jest to kod:
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);
To 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;
}
}
Rezultat:
component01
component02
And if i remove the bindingflag:
component01
getMyName
ToString
Equals
GetHashcode
GetType
component02
getMyName
ToString
Equals
GetHashcode
GetType
chcę tylko metodę getMyName
pokazany.
Działa doskonale, dzięki! Próbowałem wcześniej używać zarówno Public, jak i DeclaredOnly, ale to nie działało. Dlaczego muszę podać wszystkie trzy? – Bildsoe
@Bildsoe: 'System.Reflection.BindingFlags' jest flag-enum. Gdy flaga 'Instance' nie jest ustawiona,' GetMethods' nie zawiera metod instancji. – Ani
ok, dziękuję. Pomyślałem tylko, że gdyby metoda była którąkolwiek z wymienionych, zostałaby włączona. – Bildsoe