C#中是否存在某种“动态”枚举?

时间:2012-12-07 03:44:30

标签: c# enums

  

可能重复:
  How can I make an “abstract” enum in a .NET class library?

所以,这是我的项目。

我有一个网络框架,它有一个名为命令的枚举。这基本上告诉系统刚刚进入的数据包是CONNECT,CHAT,JOIN等。作为未来的一步,我想允许插件使用这个'框架',它可以提供额外的命令类型。我知道你不能在后续的插件中为现有的枚举添加值,那么在上面做我想做的事情的正确方法是什么?一类?只是命令的整数字段,还有一系列const int,比如CONNECT = 1,JOIN = 2等?

2 个答案:

答案 0 :(得分:1)

您应该将主要消息类型之一设置为plugin,以便您可以将消息委托给插件本身,而不是尝试自己处理这些当前未知的数据包。此外,每个插件消息都应包含一个标识符,用于指定哪个插件应该处理它。

通常,您要使插件系统尽可能模块化,因此您不必担心它会如何干扰您的代码。

答案 1 :(得分:0)

我认为最好的方法是创建一个带常量的类

public class Commands
{
    public const int CONNECT = 1;
    public const int CHAT = 2;
    public const int JOIN = 3;
}

当用户想要添加新的命令类型时,他需要覆盖此类

public class PluginCommands: Commands
{
    public const int AddBuddy = 4;
    public const int Disconnect = 5;
}