在這裏你沒有使用這個類作爲Invoke
中的第一個參數,即你必須使用下面的代碼。
MyClass master= new MyClass();
master.GetType().GetMethod("HelloWorld").Invoke(objMyClass, null);
現在如果您有另一個帶有某些參數的方法(重載方法),則可能存在另一種拋出錯誤的可能性。在這種情況下,您必須編寫代碼,指定您需要調用沒有參數的方法。
MyClass master= new MyClass();
MethodInfo mInfo = master.GetType().GetMethods().FirstOrDefault
(method => method.Name == "HelloWorld"
&& method.GetParameters().Count() == 0);
mInfo.Invoke(objMyClass, null);
現在,如果您的類實例未提前知道您可以使用下面的代碼。使用Fully Qualified Name內Type.GetType
Type type = Type.GetType("YourNamespace.MyClass");
object objMyClass = Activator.CreateInstance(type);
MethodInfo mInfo = objMyClass.GetType().GetMethods().FirstOrDefault
(method => method.Name == "HelloWorld"
&& method.GetParameters().Count() == 0);
mInfo.Invoke(objMyClass, null);
如果你的類的實例是未知提前,並在另一個程序集,Type.GetType
可能返回null。在這種情況下,對於上述代碼的代替Type.GetType
,調用下面方法
public Type GetTheType(string strFullyQualifiedName)
{
Type type = Type.GetType(strFullyQualifiedName);
if (type != null)
return type;
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
{
type = asm.GetType(strFullyQualifiedName);
if (type != null)
return type;
}
return null;
}
並調用等
Type type = GetTheType("YourNamespace.MyClass");
可能複製與http://stackoverflow.com/questions/569249/methodinfo- invoke-out-parameter- – KF2 2013-03-18 07:47:56
是否有使用反射來調用方法的原因? – TalentTuner 2013-03-18 07:48:26
我嘗試直接調用master.Helloworld(),但它不是搜索,所以我需要調用Invoke方法。 – 2013-03-18 08:34:44