在C#中,有没有办法在不调用其构造函数的情况下实例化类的实例?
假设该类是公共的,并在第三方库中定义,构造函数是内部的.我想这样做的原因很复杂,但知道是否有可能使用某种C#hackery会很有帮助.
注意:我特别不想调用任何构造函数,因此使用反射访问内部构造函数不是一个选项.
我没有尝试过,但有一个名为FormatterServices.GetUninitializedObject的方法,在反序列化过程中使用.
MSDN的评论说:
因为对象的新实例初始化为零并且没有运行构造函数,所以该对象可能不表示该对象认为有效的状态.
实际上,听起来他们将构造函数设置为内部,因此您无法实例化它.它可能有一个建造者或工厂方法.
看看这些文章:
防止第三方推导:第1部分
防止第三方推导:第2部分
他们有点解释推理.
与许多人认为的相反,构造函数与对象的实例化没有多大关系(相当误导性的术语).构造函数是一种特殊方法,可以在对象实例化之后调用,以允许该对象正确初始化自身.在C++对象实例化中为对象分配内存,在.NET和Java中,它根据字段的类型(0,null,false等)分配和预初始化为默认值.然后运行时调用构造函数.新运算符将这两个单独的操作封装到看似单个操作的操作中.如果不使用构造函数就无法创建实例,那么反序列化在.NET中永远不会有效.也就是说,所谓的ConstructorInfo类型在调用其Invoke时充当新的运算符和构造函数(...