我正在尝试在YouTube中实现example,辅导老师说的没错,但我遇到了错误。
我已经有一个私有(private)的构造函数,而我的代码中也没有公共(public)的构造函数。

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;
    }
}

最佳答案

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

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

注意所使用的出厂功能。

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

关于c# - 惰性初始化类型没有公共(public)的无参数构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46763668/

10-10 16:59