我的问题相对简单,我感觉 GetUninitializedObject(type) 方法不会在不调用任何构造函数的情况下生成给定类型的新实例,而是生成一个行为与正确对象相似的新对象(具有相同的结构)和显然具有相同的类型(但内部仍然是一个对象)。
我说因为最近我尝试使用 GetUninitializedObject 克隆一个 Form.Button 以生成我在该操作期间需要的类型的新实例(我在源对象上递归操作),我的结果具有正确的结构(和即时窗口还说它具有正确的类型)但是如果我尝试执行 MyForm.Components.Add(clonedButton),我会收到一条异常消息:“无法将'System.Object'类型的对象转换为'ControlCollection'”(但我'已经检查了 clonedButton 类型是 Button 并且它的继承也是正确的,我手动检查了克隆按钮内的几乎所有结构,并与源 Button 对象匹配,并且我已经访问了公共和私有字段)。
所以这就是我的问题的原因(因为我在 javascript 中遇到了类似的问题,当我在相同的克隆上下文中生成对象形式 base Object 然后添加具有正确名称和结构的字段时,编译器发现了我的技巧,看什么是调用每个实例的构造函数,所以我认为它可能是类似的情况),如果有人可以向我解释 GetUninitializedObject() 背后的魔法,它应该会有很大帮助(提前感谢)。