【发布时间】:2009-09-02 05:38:34
【问题描述】:
我正在实现一个系统来在我正在编写的程序的不同部分之间发送消息。有一些通用的消息类型以及一些特定于程序每个部分的消息类型。我想避免从每种类型的基本消息类派生所固有的层次结构腐烂,所以我将这种类型封装在 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() 函数初始化,但如果这样做,我将无法 switch() 传递的消息类型,因为它说“需要一个常量类型”每种情况。
【问题讨论】:
-
只有对象有什么问题? public static readonly object AddGraphic = new object(),每个都变得唯一(至少在运行时内)?
-
我无法根据只读值进行切换。无论如何,我正在重新考虑我的设计。
标签: c# constants uniqueidentifier switch-statement