我正在实现一个系统来在我正在编写的程序的不同部分之间发送消息。有一些通用的消息类型以及一些特定于程序的每个部分的消息类型。我想避免从每种类型的基本消息类派生时固有的层次结构腐烂,所以我将这种类型封装在一个 int 或 ushort 中。然后,我将不同的类型集中在一个“消息”命名空间和一个带有一堆常量的静态类中。但是,我遇到了必须为每个不同部分维护唯一编号列表的问题:
namespace Messages
{
public static class Generic
{
public const Int32 Unknown = 0;
public const Int32 Initialize = 1;
...
public const Int32 Destroy = 10;
}
}
然后在别处
namespace Messages
{
public static class Graphics
{
public const Int32 Unknown = 0;
public const Int32 AddGraphic = 11; // <-- ?
}
}
拥有任意 11 个似乎很困难,尤其是如果我有其中几个,维护和更新以确保没有冲突似乎很痛苦。是否有一个简单的解决方案来确保每个对此的引用都是唯一的?我尝试使用静态只读,在静态构造函数中使用 Unique.ID() 函数初始化它们,但如果我这样做,我无法在传递的消息类型上切换(),因为它说“需要常量类型”对于每个案例。
最佳答案
您不使用枚举有什么原因吗?
public enum MessageTypes
{
Unknown,
Initialize,
...
}
-- 编辑:
详细阐述我的评论,考虑一下
enum MessageType
{
Update,
Delete,
Destroy
}
MessageType t = ...;
switch(t){
case MessageType.Update:
DoUpdate();
}
}
对比:
interface IActionable
{
void Do ();
}
public abstract class ActionableBase : IActionable
{
// some other things
public abstract void Do ();
}
public class UpdateAction : ActionableBase
{
public override void Do ()
{
// Update Code
}
}
...
IActionable a = ...;
a.Do();
关于c# - C# 中的可切换唯一标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1365988/