在c#中是否存在可以访问部分构造的对象的奇怪边缘情况?
本文关键字:对象 情况 边缘 是否 存在 访问部 | 更新日期: 2023-09-27 18:11:34
是否存在这样的情况:具有完全自包含的构造函数*的类型可以在构造函数完成之前由构造函数外部的代码访问?也就是说,在以任何方式使用对象之前,是否保证运行自包含构造函数?
*不将this
参数传递给任何方法的构造函数,包括通过调用自身的任何方法来隐式传递。
是一个自包含的构造函数,保证在对象以任何方式使用之前运行?
不,不能保证。请看这个链接
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…