c# - 使用全局常量或枚举而不指定类名
问题描述
我正在迁移一个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;
}
}
}
}
有没有更好的方法来跳过constants
每次引用类名?我搜索了有关在不同文件中定义常量的方法的帖子,但大多数都使用这种方法。
编辑:我想有一个混乱。我也需要在所有其他 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
};
}
您甚至可以为每个枚举创建一个单独的文件。
推荐阅读
- cron - 如何每月安排多天的 Cron 作业?
- excel - 如何以自定义格式导出文件名?
- bash - 如何在此 bash 弹出窗口中输入提交消息?
- reactjs - 反应原生 | 如何创建动态状态(钩子)?
- reactjs - 使用箭头函数时出现错误无法读取未定义的属性“值”反应
- python - 使用 df.agg 在我的数据框上运行函数
- html - 在 CSS 中设置 HTML 按钮的样式
- reactjs - Eslint 错误导致 create-react-app 无法编译
- php - Laravel错误:未加括号的`a?乙:丙?d : e` 已弃用。使用 `(a ? b : c) ? d:e`或`a?b : (c ? d : e)`
- python - 在python中如何在没有if条件的情况下访问半迭代forloop值