簡介: 目前正在用 c# 統一開發一個視頻游戲/學習專案,我有一些問題并且不能使用 system.windows.forms 和 system.therading,所以我決定制作自己的時鐘并擁有更多控制權。
我希望這個時鐘在每個滴答聲中都有一個動態呼叫者,所以當它滴答聲時,會呼叫另一個物件的方法,使用 system.reflection 以及許多博客和網站作為參考,我發現如何讓它從同一個物件呼叫統一的方法呼叫,我希望它呼叫游戲中的任何方法,例如 system.windows.forms,此時我這樣做:
public object InvokeByName(string typeName, string methodName, object target)
{
Type callType = Type.GetType(typeName);
Binder defaultBinder = Type.DefaultBinder;
return callType.InvokeMember(methodName,
BindingFlags.InvokeMethod | BindingFlags.Public,
defaultBinder, target , new object[] { });
}
public void Tick(string method, string methodName, object target)
{
InvokeByName(method, methodName, target);
}
public void Set_Tick(string typeName, string methodName, object target)
{
this.typeName = typeName;
this.methodName = methodName;
this.target = target;
}
public void TEST()
{
Debug.Log("TEST");
}
這里的問題是方法無法找到方法刻度,當我將刻度設定為clock.Set_Tick("Clock", "TEST", clock);
這應該執行方法 Clock.TEST 但由于某種原因它無法找到該方法,我幾乎嘗試了所有方法并在堆疊中讀取了類似的提示,但它們不適合這個問題,想法?
編輯 完整錯誤代碼:
MissingMethodException: Method 'Clock.TEST' not found.
System.RuntimeType.InvokeMember (System.String name,
System.Reflection.BindingFlags bindingFlags, System.Reflection.Binder
binder, System.Object target, System.Object[] providedArgs,
System.Reflection.ParameterModifier[] modifiers,
System.Globalization.CultureInfo culture, System.String[] namedParams)
(at <d4cde64232cf45659d86aafa597faa77>:0)
System.Type.InvokeMember (System.String name,
System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder
binder, System.Object target, System.Object[] args) (at
<d4cde64232cf45659d86aafa597faa77>:0)
Clock.InvokeByName (System.String typeName, System.String methodName,
System.Object target) (at Assets/Scripts/Clock.cs:31)
Clock.Tick (System.String method, System.String methodName,
System.Object target) (at Assets/Scripts/Clock.cs:38)
Clock.FixedUpdate () (at Assets/Scripts/Clock.cs:58)
uj5u.com熱心網友回復:
您需要再提供一個標志 -BindingFlags.Instance呼叫呼叫:
return callType.InvokeMember(methodName,
BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance,
defaultBinder, target, new object[] { });
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490580.html
