是否有任何奇怪的边缘情况,可以在c#中访问部分构造的对象?

时间:2015-09-05 22:04:11

标签: c# constructor

在构造函数完成之前,是否存在构造函数之外的代码可以访问具有完全自包含构造函数*的类型的情况?也就是说,是否可以在以任何方式使用对象之前保证运行自包含构造函数?

*没有将this参数传递给任何方法的构造函数,包括通过调用自身的任何方法隐式传递它。

1 个答案:

答案 0 :(得分:5)

  

是一个自包含的构造函数,保证在以任何方式使用对象之前运行它?

不,不保证。看到这个链接

https://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatterservices.getuninitializedobject.aspx

因此,无需调用构造函数即可启动对象。

  

因为对象的新实例初始化为零并且没有运行构造函数,所以该对象可能不代表该对象认为有效的状态。

您可以通过以下方式重现它:

public class DemoClass
{
    public int Prop = 5;
    public DemoClass()
    {
        Prop = 6;
    }
}
0

输出 Bundle ,而不是5或6 ......