在c#中构造类/结构的最佳方法

use*_*234 6 c# networking struct class

我一直在使用针对C语言实现的网络协议规范,并分别用C风格定义:

struct some_header {
  uint8_t version;
  uint8_t type;
  uint16_t length;
  uint32_t id; /
};

struct some_struct {
  struct some_header header;
  uint8_t field1; 
  uint8_t pad[3]; /* Pad to 32 bits */
  uint32_t field2;
};
Run Code Online (Sandbox Code Playgroud)

规范中定义了大约一百个像"some_struct"的结构.

现在的目标是在C#中复制定义并在这些结构周围增加一些功能.

在C#中使用什么是最好的原语来表示上面的例子中的结构,假设将它们表示为对象会很好吗?

  1. 使用unsafe子句复制类似C的定义,然后在每个结构周围使用类包装器

  2. 使用StructLayout属性来指导托管结构内的布局,并为每个此类结构使用包装类

  3. 使用完整的类,只使用内存或网络流进行线表示

还有其他想法,除了托管c ++?

其次,显然任务本身非常耗费人力,并且在任何情况下都容易出错.有没有自动化帮助将C头转换为上述解决方案之一?有人可以推荐一个吗?

UPD.

一些图纸更好地描述了问题.

(BoxA)---通过TCP/IP运行的有线协议---(BoxB)

假设BoxA运行一些用纯C编写的代码,BoxB应该运行用C#编写的代码.

并且有线协议代表了这个巨大的规范,有100多个结构来传达BoxA和BoxB.如果使用Google Protocol Buffers或Apache Thrift定义协议可能会容易得多,但不幸的是我正在处理标准定义的问题.

Dar*_*der -2

虽然 C# 有Struct,但最好的选择是使用Class. 您可以使用类作为数据容器,请参阅贫乏的域模式,或者您可以在其中拥有实现,例如验证和业务逻辑。请参阅:域驱动。

在处理领域模型时,请确保遵循SOLID 原则

另外,根据您的领域模型,您当然可以利用抽象、继承等。

哦。保持简单直观。

  • -1 我根本不明白这个建议与这个问题有什么关系? (2认同)