我正在迁移 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/