lazily-initialize类型没有公共参数构造函数

时间:2017-10-16 05:48:21

标签: c# lazy-initialization

我正在尝试在youtube中实现example,导师说得对,但我收到了错误。
我已经有一个私有构造函数,我的代码中不能有公共构造函数。

private static int _InstanceCount = 0;

private SingletonDemo1()
{
    _InstanceCount++;
    Console.WriteLine("Instance Count: " + _InstanceCount.ToString());
}

private static readonly Lazy<SingletonDemo1> _Instance = new Lazy<SingletonDemo1>();

public static SingletonDemo1 Instance
{
    get
    {                               
        return _Instance.Value;
    }
}

1 个答案:

答案 0 :(得分:3)

根据示例,您需要在Lazy的构造函数中手动初始化对象,就像在演示视频中一样

private static readonly Lazy<SingletonDemo1> _Instance = new Lazy<SingletonDemo1>(() => new SingletonDemo1());

请注意使用的工厂功能。

没有它,代码会尝试使用反射来初始化对象,但正如您已经声明的那样构造函数是私有的,因此它将失败。这就是为什么你需要告诉Lazy如何在需要时创建实例。