Qua*_*ion 1 c# const uniqueidentifier switch-statement
我正在实现一个系统,用于在我正在编写的程序的不同部分之间发送消息.有一些通用的消息类型以及一些特定于程序的每个部分.我想避免从每个类型的基本消息类派生中固有的层次结构腐烂,所以我将这种类型封装在int或ushort中.然后,我使用"Messages"命名空间集中不同的类型,并使用一堆常量集中静态类.但是,我遇到了必须维护每个不同部分的唯一编号列表的问题:
namespace Messages
{
public static class Generic
{
public const Int32 Unknown = 0;
public const Int32 Initialize = 1;
...
public const Int32 Destroy = 10;
}
}
Run Code Online (Sandbox Code Playgroud)
其他地方
namespace Messages
{
public static class Graphics
{
public const Int32 Unknown = 0;
public const Int32 AddGraphic = 11; // <-- ?
}
}
Run Code Online (Sandbox Code Playgroud)
拥有那么随意的11似乎很难,特别是如果我有其中的几个,保持和更新以确保没有碰撞似乎是一种痛苦.是否有一个简单的解决方案,以确保每个参考都是独一无二的?我尝试使用静态只读,在静态构造函数中将它们从Unique.ID()函数初始化,但如果我这样做,我无法切换()传递的Message类型,因为它说"预期的常量类型"对于每个案例.
你有没有使用枚举的原因?
public enum MessageTypes
{
Unknown,
Initialize,
...
}
Run Code Online (Sandbox Code Playgroud)
- 编辑:
仔细阅读我的评论,考虑一下
enum MessageType
{
Update,
Delete,
Destroy
}
MessageType t = ...;
switch(t){
case MessageType.Update:
DoUpdate();
}
}
Run Code Online (Sandbox Code Playgroud)
与:
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();
Run Code Online (Sandbox Code Playgroud)