c# - 添加函数作为对象的属性
问题描述
在我的项目中,我正在实现一个动作类,并且想知道是否可以将函数作为参数传递,如下所示:
public class Action : MonoBehavior {
public int ID;
public string Name;
//Test variable to store a function here
}
稍后我会创建一个函数,例如这个函数,然后调用它。
void TestFunction() {
print("Test");
}
public Action ExampleAction;
ExampleAction.Test = TestFunction();
最后我可以简单地调用“Action.Test”来运行TestFunction。
我已经对该主题进行了一些研究,并且我相信它与授权有关,但是在这种情况下我该怎么做呢?
更重要的是,这种实现是可靠的还是最好的方法?在我的项目中,我计划有很多可切换的动作,当点击它们时,会不断地做各种各样不同的事情。
解决方案
据我了解,您要做的是创建一个参数化委托。
我认为UnityAction
非常适合这个。
UnityAction
是一个内置委托,不带参数也不返回值。
在您的情况下,您可能希望使用参数化UnityAction<T1, T2>
,您将在其中设置T1
为 int 和T2
字符串。
这是演示的片段:
using UnityEngine;
using UnityEngine.Events;
public class UnityActionDemo
{
UnityAction<int, string> action;
private void Start()
{
action = TestMethod;
}
public void TestMethod(int id, string name)
{
Debug.Log("id is: " + id + "\t name is: " + name);
}
}
action
然后可以传递给任何以 aUnityAction<int, string>
作为参数的方法。
为了调用该方法,请action.Invoke
使用您要使用的参数进行调用:
action.Invoke(27, "A cool method name");
:)
推荐阅读
- excel - Excel 公式:返回真假值的范围
- python - 由于“AttributeError:‘NoneType’对象没有属性‘properties’”,Kivy 程序无法运行
- javascript - 在我输入后,我的数据被接收为空
- haskell - Haskell,用 foldr 实现任何功能
- neural-network - 如何使用一条 ROC 曲线评估多重测试
- javascript - 警告:使用 auth0 登录时,无法对未安装的组件执行 React 状态更新
- python - 在处理一列列表时,如何使用 to_tsv() 将单引号切换为双引号?
- r - 创建一个忽略 NA 的新变量
- java - 如何在删除前后打印数组列表对象
- java - 寻找下一个闰年java