c# - C# 中的可切换唯一标识符

标签 c# constants uniqueidentifier switch-statement

我正在实现一个系统来在我正在编写的程序的不同部分之间发送消息。有一些通用的消息类型以及一些特定于程序的每个部分的消息类型。我想避免从每种类型的基本消息类派生时固有的层次结构腐烂,所以我将这种类型封装在一个 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/

相关文章:

c# - 方法名称会被编译到 EXE 中吗?

C++ const 左值引用

sql-server - Sql Server : uniqueidentifier plus integer compound PK . .. 使用什么类型的索引?

ios - 给定分发包ID,可以在iOS 7上获取identifierForVendor(IDFV)吗?

c++ - 在两个 cpp 文件中使用相同签名定义的本地函数。为什么他们应该彼此可见?

c# - 在 WPF 中向 DataGrid 添加行?

c# - 在 C# 中完全禁用鼠标移动和单击

c# - 正则表达式:搜索键验证

JSP 中的 Java 常量

c - 在 C 中使用 'const',可能会导致什么移植问题?