所以这是我的代码:
static class MessageHandler<T> where T : Message
{
public delegate void MessageDelegate(T m);
private static MessageDelegate messageHandlers;
public static void Publish(T message)
{
messageHandlers(message);
}
public static void Subscribe(MessageDelegate messageHandler)
{
messageHandlers += messageHandler;
}
}
Message
只是其他类可以继承的空类。大多数Message
派生都是具有相关属性的简单对象(这是针对游戏的,因此可能会有PlayerDamagedMessage
伤害和攻击者作为属性。)
基本上,Player
当他们受到攻击时,他们会在课堂上发布一个PlayerDamagedMessage
,然后其他想要了解它的类可以订阅,然后在它发生时接收相关详细信息。
这适用于多条消息的原因是泛型类在 C# 中的工作方式。我的意思是,在幕后使用的每种不同的泛型类型都会有一个委托的副本。
实际上,我在玩耍时偶然发现了这一点,并且很兴奋,因为它确实简化了我的代码,并且在这一点上看起来几乎就像一种设计模式。
我在这里发帖询问使用这种方法的潜在缺点。幕后通用代表的数量是否有限制?这样的规模会有多好?
此外,有没有办法进行某种通用类型推断,以便语句不必这么长?
MessageHandler<MessagePlayerDamaged>.Publish(new MessagePlayerDamaged(this, this));
谢谢阅读。