我需要能够保存委托及其连接到哪个函数的信息。像这样的东西:
在 C# 中:
public class Skill
{
[XmlAttribute("SkillFunction")]
public EventHandler<SkillEventArgs>? SkillFunction { get; set; }
}
public static void CriticalStrike(object? sender, SkillEventArgs? e)
{
}
因此,当我保存其
SkillFunction
设置为绑定到 CriticalStrike
的技能时,它应该像这样保存:
<Skills xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org /2001/XMLSchema">
<Skill SkillFunction="CriticalStrike" />
当我反序列化它时,
SkillFunction
应该订阅 CriticalStrike
.
然而,这不起作用。有什么解决办法吗?或者我唯一的选择是将函数名称保存在一个字符串中,然后在一个 switch-case 中硬编码,该 switch-case 遍历所有 100 个可能的函数名称并将它们连接到正确的函数?我想避免任何硬编码,但我不知道我将如何继续这样做。
谢谢
我尝试只序列化一个 EventHandler,它没有用。我期待它能够保存委托绑定/订阅的功能。
我用 Reflection(和 chatGPT...)解决了它,发布解决方案以防有人偶然发现此页面寻找答案。
XML类:
[XmlAttribute("SkillFunction")]
public string SkillFunctionName { get; set; }
保存时:
SkillFunctionName = nameof(Skill.CriticalStrike);
加载时:
MethodInfo? method = this.GetType().GetMethod(SkillFunctionName);
if (method != null)
{
EventHandler<SkillEventArgs> skillFunctionDelegate = (EventHandler<SkillEventArgs>)Delegate.CreateDelegate(typeof(EventHandler<SkillEventArgs>), this, method);
skillBook.Actor.DealDamageEventHandler += skillFunctionDelegate;
}