C#如何使用名称字符串调用不同的函数?

C#如何使用名称字符串调用不同的函数?,c#,xml,C#,Xml,我正在为一个游戏实现一个对话系统。我使用xml作为数据源,因为我希望对话可以从外部编辑/添加,而且我遇到了一个以前从未遇到过的编程问题 假设我有这个XML元素: <Action character="MC" name="giveItem" item="Potion" quantity="2"/> 我的问题是:我如何调用giveItem()以及我可能会在游戏中使用的其他函数,这些函数的名称字符串来自“name”属性??到目前为止,我看到(没有实现)反射是一种可能性,字符串字典是键,委

我正在为一个游戏实现一个对话系统。我使用xml作为数据源,因为我希望对话可以从外部编辑/添加,而且我遇到了一个以前从未遇到过的编程问题

假设我有这个XML元素:

<Action character="MC" name="giveItem" item="Potion" quantity="2"/>
我的问题是:我如何调用
giveItem()
以及我可能会在游戏中使用的其他函数,这些函数的名称字符串来自“name”属性??到目前为止,我看到(没有实现)反射是一种可能性,字符串字典是键,委托是值


我想知道的是,在开始编写系统的这一部分之前,是否有一种更好的方法。如果这很重要的话,我正在使用统一

如果您使用的是Unity,另一种方法是调用GameObject.SendMessage方法

参数是作为对象传递的,因此您必须找到一种方法在容器上传递参数,并且接收它的函数必须知道如何“解压”它们,但是我猜对于参数来说,一个从字符串转换为对象的字典是可以的

使用委托的问题是,它们必须是相同的类型(使用相同数量和类型的参数),但您可以使用如上所述都使用字典的委托

另一种方法是实现命令设计模式,该模式将行为封装在对象内:


本质上,在读取XML时,您将创建一个属于Command子类的GiveItemCommand对象。然后在需要应用操作时执行对象。

欢迎使用堆栈溢出!请花点时间仔细检查:所有方法是否都具有相同的参数/签名?例如:
函数(字符串,int)
@BlackFrog否,它们将具有不同的参数。但是我可以使用字符串,并在方法内部将它们转换为我需要的内容。现在,参数的数量肯定会有所不同。我将查看SendMessage,但我希望避免系统的单一行为。唯一从它扩展的脚本是显示对话框的脚本。@Mbastias您仍然可以使用将xml元素作为参数并对其进行处理的委托。但是如果你想有更大的抽象性,我认为反思是一种方式。这是你能做到的最不耦合的方式。只是看起来有点过分了,仅此而已。如果您想解耦行为,可以尝试实现命令模式,它本质上是创建一个知道如何应用该操作的对象。@Mbastias因此,当您阅读xml时,您要做的是创建一个知道它必须做什么的命令子类对象。在您的回答中没有看到编辑,如果有人有其他的方式或观点,我会再多留一天不回答这个问题,如果没有,我会把你的标记为接受。谢谢^^只要它对你有帮助。
MainCharacter.Inventory.giveItem("Potion",2)