2017-10-16 174 views
2

我试图在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; 
    } 
} 

回答

2

根据需要手动初始化懒惰的构造函数的对象,就像在演示视频

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

注意使用的工厂函数的例子。

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

相关问题