c# - 以编程方式检查 C# 中类的更改

标签 c#

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

...除了明显的“只需在类里面对此进行评论,这可以保证开发人员永远不会搞砸”- 答案。

提前致谢。

最佳答案

Each attribute is stored in a specific order, and if you change this class you have to be reminded of these export/import routines needs changing.

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

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

关于c# - 以编程方式检查 C# 中类的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427493/

相关文章:

c# - 重定向到登录页面时,如何使 ASP.NET 身份验证保留 Url 片段?

java - 如何验证列表中的元素是否按字母顺序排序

c# - 免费提供的 Web 服务/API

c# - ApplicationPool 用户与 StartInfo.Username?

c# - CSS 问题 : <hr> line not showing in non-compatibility view in IE 8

c# - 为什么需要业务逻辑层?

c# - 如何在 C# 中舍入浮点值?

c# - 将数据加载到松散耦合 View 及其 View 模型/模型中的 MVVM 策略

c# - 如何将Word文档的所有页面保存为图片?

c# - 尝试在 C# 中更改工作表名称时出现奇怪的错误