0

我正在编写一些代码,但有人告诉我我有一个潜在的错误。我们的建筑师解释了原因,但我仍然不明白。对我来说,即使在他更正之后,它似乎也在做同样的工作。任何人都可以向我解释什么是原来的错误?

根据我们的架构师,它应该是什么样子:

    private IIzuProxyService _izuProxyService = null;

    private IIzuProxyService IzuProxyService
    {
        get
        {
            if (_izuProxyService == null)
                _izuProxyService = new IzuProxyService();
            return _izuProxyService;
        }
    }

它原来的样子:

    private IIzuProxyService _izuProxyService = null;

    private IIzuProxyService IzuProxyService
    {
        get
        {
            if (_izuProxyService == null)
                return new IzuProxyService();
            return _izuProxyService;
        }
    }

非常感谢!

4

2 回答 2

0

您的代码永远不会分配给该_izuProxyService字段。

这意味着无论何时IzuProxyService访问该属性,_izuProxyService 总是 null. 因此它总是会实例化一个新实例。

于 2019-10-25T09:17:41.777 回答
0

本地字段永远不会被分配一个值并且将保持为空,因为属性 getter 每次都返回一个新实例而不为本地字段分配一个值。

一种解决方法可能是用于Lazy<T>管理所需字段的延迟加载。

提供对延迟初始化的支持。

private Lazy<IIzuProxyService> _izuProxyService = new Lazy<IIzuProxyService>(() => new IzuProxyService() );

private IIzuProxyService IzuProxyService {
    get {
        return _izuProxyService.Value;
    }
}

Lazy<T>替换_

if (_izuProxyService == null)
    _izuProxyService = new IzuProxyService();
return _izuProxyService;
于 2019-10-25T09:28:10.070 回答