使用反射来复制对象有什么缺点吗?

时间:2015-12-24 02:16:04

标签: .net reflection clr

我正在使用反射在实现相同界面的对象之间复制数据,一切似乎都运行良好,但在部署到生产之前我想问:有什么理由我应该避免这样做吗?

我之前使用硬编码属性的实现无法检测到接口的添加,也无法避免我或我的团队错误地将属性复制到另一个相同类型的属性。

另外,我按类型在静态字典上缓存属性,这有什么优势,或者我只是将CLR字典加倍?

2 个答案:

答案 0 :(得分:0)

以所述方式使用Reflection有两个主要问题:

  1. 它通常比直接编写的代码慢,有时会慢得多。

  2. 它预先假定所有要复制的信息都可以通过相同的方式访问。

  3. 虽然有时可能会使用Reflection为类功能很好地映射到接口的类生成代理对象,但是无法修改它以实际实现它,我建议如果你控制类和接口,你应该在接口中包含复制对象所需的所有功能,以避免在添加新功能时使用Reflection的需要(例如,定义构造新对象的方法,其中包含从旧对象复制的数据 - 包括调用者可能没有的数据)了解)。

答案 1 :(得分:0)

您之前实现的另一种替代方法是使用AutoMapper之类的工具,这样您就不必自己编写映射代码。