1

有没有办法检查 C# 中类的大小?

我问的原因是:

我有一个将类的数据存储在文件中的例程,以及一个从同一个文件加载该对象(类)的不同例程。每个属性都以特定顺序存储,如果您更改此类,则必须提醒您这些导出/导入例程需要更改。

C++ 中的一个示例(无论这可能是多么笨拙或糟糕的编程)如下:

#define PERSON_CLASS_SIZE 8
class Person
{
  char *firstName;
}

...

bool ExportPerson(Person p)
{
  if (sizeof(Person) != PERSON_CLASS_SIZE ) 
  {  
     CatastrophicAlert("You have changed the Person class and not fixed this export routine!")
  }
}

因此,在编译之前,您需要知道 Person 的大小,并相应地修改具有此大小的导出/导入例程。

有没有办法在 C# 中做类似的事情,或者是否有其他方法可以“确保”不同的开发人员在更改类时更改导入/导出例程。

...除了明显的“只在课堂上评论这个,这可以保证开发人员永远不会搞砸” - 答案。

提前致谢。

4

2 回答 2

3

每个属性都以特定顺序存储,如果您更改此类,则必须提醒您这些导出/导入例程需要更改。

听起来您正在编写自己的序列化机制。如果是这种情况,您可能应该以正确的顺序包含某种预期属性的“指纹”,并在读取时对其进行验证。然后,您可以将当前指纹包含在单元测试中,如果添加属性,它将失败。然后可以采取适当的行动(例如迁移现有数据)并更新单元测试。

仅检查类的大小肯定不会发现所有错误 - 如果您在同一更改中添加了一个属性并删除了一个相同大小的属性,您可能会在不注意的情况下破坏数据。

于 2012-09-14T15:24:58.733 回答
1

部分原因可能不是实现您需要的最佳方法,我认为最快的方法是使用Cecil。您可以获得整个班级的 IL 正文。

于 2012-09-14T15:31:15.387 回答