Brief introduction:

我希望这个时钟在每个刻度上都有一个动态调用者,所以当它刻度时,会使用system调用另一个对象的方法.反射和许多博客和网站作为参考,我发现了如何让它调用来自同一个对象的方法来调用unity调用,我希望这可以调用游戏中的任何方法,比如系统.windows .表格,在这一点上,我提出:

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");
}

这里的问题是,当我将tick设置为clock.Set_Tick("Clock", "TEST", clock);时,该方法无法找到方法tick

这应该执行方法时钟.测试但由于某种原因,它无法找到方法,我try 了几乎所有的方法,也阅读了堆栈中类似的提示,但它们不适合这个问题, idea ?

Edit

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)

推荐答案

您需要为invoke调用再提供一个标志-BindingFlags.Instance:

return callType.InvokeMember(methodName,
            BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance,
            defaultBinder, target, new object[] { });

Csharp相关问答推荐

为什么我的弹丸朝错误的方向移动?

如何处理OpenTelegram中可以划分的大痕迹?

C#编译器会优化表达体成员的重新判断吗?

PostingAsJsonAschange在从调用的方法返回时给出500错误

在Microsoft XNA框架(MonoGame)中旋转相机

react 式扩展连接中的非交叉LeftDurationTimeout

需要澄清C#的Clean Architecture解决方案模板的AuditableEntityInterceptor类

如何在Windows 11任务调度程序中每1分钟重复一次任务?

Mongo作为.NET中Testcontainers的副本集

在静态模式下实例化配置

从.Net 6 DLL注册和检索COM对象(Typelib导出:类型库未注册.(异常来自HRESULT:0x80131165))

Rx.Net窗口内部可观测数据提前完成

在C#中,非静态接口方法的抽象和虚拟是冗余的吗?

什么类型的对象存储在大对象堆(LOH)中

如何让两个.NET版本不兼容的项目对话?

Azure函数-在外部启动类中生成配置时出错

C#LINQ延迟执行和嵌套方法

JSON串行化程序问题.SQLite中的空值

Visual Studio 17.8.0制表符自动完成问题--三缩进

从MudAutoComplete打开对话框,列表仍然可见