【发布时间】:2014-04-02 09:32:45
【问题描述】:
我最近开始学习 Reflection.Emit,因此我可以替换所有 Activator 用法,从而在我的代码中获得更好的性能。我目前正在考虑某种序列化和反序列化库。特别是对于反序列化,我想重新创建与序列化之前完全相同的对象状态(我假设序列化是 100% 正确的)。但是,例如可以有一个类,它有多个构造函数,每个构造函数都做一些复杂的事情,因为这个对象具有复杂的逻辑并且必须以某种特定的方式进行初始化。但是,当我对对象的所有内容进行序列化后,我能做的最简单的事情就是绕过任何提供的 ctors - 只需创建一个空对象并用数据填充它的所有字段。期间。
不幸的是,在ILGenerator.Emit 中使用OpCodes.Newobj 需要将ConstructorInfo 作为参数传递。对于结构来说这很容易,因为它们总是有默认的无参数 ctor。但是对于类,情况有所不同。
我将不胜感激。
【问题讨论】:
-
一定是可以的,因为
BinaryFormatter创建对象而不调用构造函数。
标签: performance reflection constructor instance reflection.emit