首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时初始化不常使用的基类对象

何时初始化不常使用的基类对象
EN

Code Review用户
提问于 2014-01-10 02:46:28
回答 1查看 98关注 0票数 4

我有一个由业务对象继承的业务对象基类:

代码语言:javascript
复制
public class ErrorBase
{
    public bool HasError { get; set; }
    public List<Error> ErrorList { get; set; }

    public ErrorBase()
    {
        HasError = false;
        ErrorList = new List<Error>();
    }
}

这能被优化吗?我担心的是,每次实例化业务对象时都会初始化List<Error>,而不管是否添加了错误对象。

我能想到的唯一选择是初始化ErrorList = null,然后在调用ErrorList.Add()之前检查ErrorList != null,但我不确定在添加错误之前每次执行检查实际上是一种优化。当然,它在向List<>添加错误对象的过程中增加了步骤。

还有别的办法我没想过吗?如果没有,这些方法中的一种是否被视为最佳做法?

EN

回答 1

Code Review用户

回答已采纳

发布于 2014-01-10 03:56:33

首先:我怀疑创建一个新的List<>对象会产生足够的开销,这会对您的系统产生可衡量的影响,所以除非您能够证明这是一个问题,否则不要担心它。

话虽如此:这个问题的经典解决方案是延迟实例化。由于您已经拥有了一个属性,这可以很容易地通过以下方法实现:

代码语言:javascript
复制
public class ErrorBase
{
    public bool HasError { get; set; }

    private List<Error> _ErrorList = null;
    public List<Error> ErrorList
    {
        get
        {
            if (_ErrorList == null)
            {
                _ErrorList = new List<Error>();
            }
            return _ErrorList;
        }
    }

    public ErrorBase()
    {
        HasError = false;
    }
}

如果在其中添加了多个线程,那么需要在get中添加一些锁定--但另一方面,List<>本身并不是线程安全的,所以我假设情况并非如此。

在.NET 4.0和更高版本中,您有了Lazy<>,这将使代码更短一些。

票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/38961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档