从反射调用构造函数时,我得到了一个不同的 C# 对象实例

本文关键字:一个 实例 对象 构造函数 调用 反射 | 更新日期: 2023-09-27 18:33:39

>比较下面同一类的两个实例。变量instanceA是使用反射创建的,而instanceB是使用对我的 VS2012 项目中的 DLL 的直接引用创建的。

var a = Assembly.Load(File.ReadAllBytes(@"C:'MyFilePath.dll"));
var t = a.GetType("Namespace.MyClassType");
var instanceA = Activator.CreateInstance(t);
var instanceB = new Namespace.MyClassType();

问题出在哪里?这些是不平等的。instanceAinstanceB中的字段不同。目前我的代码正在工作,只要我使用 instanceB .但是,如果我只将字母"B"更改为"A",则结果对象会有所不同,这在后期会破坏乘积。

您可能理解,我的任务是使用反射而不是引用。我已经确认正在调用正确的构造函数。

从反射调用构造函数时,我得到了一个不同的 C# 对象实例

问题是您有不同的程序集 - 在一种情况下,您仅从字节数组加载程序集(恰作为MyFilePath.dll存储在磁盘上),而在另一种情况下,您指的是由于项目中的引用而加载到 AppDomain 中的程序集。

目前还不清楚您的上下文是什么(不同的程序集在哪里等),但您应该研究如何加载程序集 - 这是它的关键,而不是Activator.CreateInstance部分。