c# - 使用全局常量或枚举而不指定类名

标签 c# .net enums constants

我正在迁移 C 程序到C#,它只是监听串行端口并解码传入的字节以构建命令数据包。所以我在名为“protocol.h”的头文件中有一些常量变量和类型定义。我需要在我的 C# 类中使用这些常量变量和 typedef。

我已经创建了一个 "protocol.cs" 文件来保存常量。

//protocol.cs file

namespace SerialPort_Listener
{
    class constants
    {
        const byte PCK_SOP1 = 0xAA;
        const byte PCK_SOP2 = 0xCC;
        const byte PCK_EOP = 0x55;

        public enum CMD_IDs
        {
            ID_READ_VAR = 0,
            ID_WRITE_VAR,
            ID_READ_MEM,
            ID_WRITE_MEM,

            ID_COUNT    
        };

        public enum RET_VALs
        {
            PCK_READY = 0,
            PCK_NOT_RDY,
            PCK_INV_ID,
            PCK_CHK_ERR,

            VAL_COUNT
        };
    }
}

现在我想使用 RET_VALs 枚举作为另一个类文件中方法的返回类型。但我需要像这样使用它:

//decoder.cs file

namespace SerialPort_Listener
{
    class protocol
    {
        // C version: RET_VALs decode(uint8 recByte){}
        public constants.RET_VALs decode(byte recByte) 
        {
            // C version: if(recByte == PCK_SOP1){}
            if (recByte == constants.PCK_SOP1)         
            {
                // C version: return PCK_NOT_RDY; 
                return constants.RET_VALs.PCK_NOT_RDY; 
            }
        }        
    }       
}

是否有更好的方法每次都跳过引用类名常量?我搜索了有关在不同文件中定义常量的方法的帖子,但大多数都使用这种方法。

编辑:我猜这是一个困惑。我也需要在我的所有其他 cs 文件中使用这些。因此,将枚举移出类是不够的,因为我仍然无法从另一个文件访问它们。

最佳答案

枚举不需要在类中:

namespace SerialPort_Listener
{
    class constants
    {
        const byte PCK_SOP1 = 0xAA;
        const byte PCK_SOP2 = 0xCC;
        const byte PCK_EOP = 0x55;
    }

    public enum CMD_IDs
    {
       ID_READ_VAR = 0,
       ID_WRITE_VAR,
       ID_READ_MEM,
       ID_WRITE_MEM,
       ID_COUNT    
   };

   public enum RET_VALs
   {
       PCK_READY = 0,
       PCK_NOT_RDY,
       PCK_INV_ID,
       PCK_CHK_ERR,
       VAL_COUNT
    };
}

您甚至可以为每个枚举创建一个单独的文件。

关于c# - 使用全局常量或枚举而不指定类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51558113/

相关文章:

c# - NUnit 测试错误?预期为 <MyType> 但为 <MyType>

c# - 当在表单上的某处单击按钮时,wpf 编辑列表框中的项目

c# - 从 C# 中的不同线程启动计时器

c# - 带有 GridSplitter 的 WPF 扩展器

c# - 是否可以用 NHibernate 模仿 IQueryable?

c# - 为什么我在安装 VS2012/.Net 4.5 后在 .Net 4.0 Assembly.GetCustomAttributes 上出现 ExecutionEngineException?

c# - 如何显示包含图像的对象列表并将其绑定(bind)到源 MVVM

java - 算术运算符作为枚举?

c# - 解析混合值枚举(char和int)

postgresql - 在带有 Postgres 的 Elixir 中,我怎样才能让数据库返回未使用的枚举值?