【问题标题】:the lazily-initialize type does not have a public parameter-less constructor惰性初始化类型没有公共无参数构造函数
【发布时间】:2017-10-16 05:48:21
【问题描述】:

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

【问题讨论】:

    标签: c# lazy-initialization


    【解决方案1】:

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

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

    注意使用的工厂函数。

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

    【讨论】:

    • 即使默认构造函数 public,以这种方式指定初始化是否有性能优势,因为这样会跳过反射?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多