Sto eseguendo un caricamento di runtime assembly, ma non conosco i nomi di classi o metodi. Non voglio elencare tutte le classi nel mio assembly con i loro metodi dichiarati, non quelli ereditati da System.Object.Come trovo solo i metodi dichiarati, quando si carica un assembly di runtime?
Questo è il codice:
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);
Questa è la 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;
}
}
Il risultato:
component01
component02
And if i remove the bindingflag:
component01
getMyName
ToString
Equals
GetHashcode
GetType
component02
getMyName
ToString
Equals
GetHashcode
GetType
Voglio solo il metodo getMyName
mostrato.
Funziona perfettamente, grazie! Ho provato a utilizzare sia Public e DeclaredOnly in precedenza, ma questo non ha funzionato. Come mai ho bisogno di specificare tutti e tre? – Bildsoe
@Bildsoe: 'System.Reflection.BindingFlags' è un enumerato. Quando il flag 'Instance' non è impostato,' GetMethods' non include i metodi di istanza. – Ani
ok, grazie. Ho solo pensato che, se il metodo fosse uno dei menzionati, sarebbe stato incluso. – Bildsoe