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

本文关键字:对象 情况 边缘 是否 存在 访问部 | 更新日期: 2023-09-27 18:11:34

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

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

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

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

不,不能保证。请看这个链接

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

因此可以在不调用构造函数的情况下初始化对象。

由于对象的新实例初始化为0,并且没有运行构造函数,因此该对象可能不表示该对象认为有效的状态。

你可以复制它:

var demo = (DemoClass)System.Runtime.Serialization
                      .FormatterServices.GetSafeUninitializedObject(typeof(DemoClass));
Console.WriteLine("PROP=" + demo.Prop);

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

输出将 0 ,不是5或6…

相关文章: