我正在将C
程序迁移到C#
,该程序仅侦听串行端口并解码传入的字节以构建命令包。因此,在名为“ protocol.h”的头文件中,我有一些常量变量和typedef。我需要在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;
}
}
}
}
是否有更好的方法来每次跳过引用类名constants
?我搜索了有关在不同文件中定义常量的方法的文章,但大多数都使用此方法。
编辑:我想这很混乱。我也需要在所有其他CS文件中使用这些。因此,将枚举移出类是不够的,因为我仍然无法从另一个文件访问它们。
答案 0 :(得分:4)
枚举不需要在类中:
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
};
}
您甚至可以为每个枚举创建一个单独的文件。
答案 1 :(得分:2)
看来,您正在寻找using static
构造:
using static SerialPort_Listener.constants;
using static SerialPort_Listener.constants.RET_VALs;
那你可以放
// Now, there's no need to mention "constants" class here
if (recByte == PCK_SOP1)
{
// as well as the enum
return PCK_NOT_RDY;
}