当前位置:  开发笔记 > 编程语言 > 正文

初始化集合,以便用户不必

如何解决《初始化集合,以便用户不必》经验,为你挑选了1个好方法。

这可能是一个愚蠢的问题,但是有没有为用户初始化集合属性的常见做法,所以在类中使用之前,他们不必新建一个新的具体集合?

这些中的任何一个都优先于另一个吗?

选项1:

public class StringHolderNotInitialized
{
    // Force user to assign an object to MyStrings before using
    public IList MyStrings { get; set; }
}

选项2:

public class StringHolderInitializedRightAway
{
    // Initialize a default concrete object at construction

    private IList myStrings = new List();

    public IList MyStrings
    {
        get { return myStrings; }
        set { myStrings = value; }
    }
}

选项3:

public class StringHolderLazyInitialized
{
    private IList myStrings = null;

    public IList MyStrings
    {
        // If user hasn't set a collection, create one now
        // (forces a null check each time, but doesn't create object if it's never used)
        get
        {
            if (myStrings == null)
            {
                myStrings = new List();
            }
            return myStrings;
        }
        set
        {
            myStrings = value;
        }
    }
}

选项4:

还有其他好的选择吗?



1> casperOne..:

在这种情况下,我没有看到延迟加载的原因,所以我会选择2.如果你创建了大量的这些对象,那么产生的分配和GC的数量将是一个问题,但那是除非事后证明是一个问题,否则不要考虑.

另外,对于这样的事情,我通常不允许将IList赋值给类.我会把这个只读.在不控制IList的实现的情况下,您可以打开自己的意外实现.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有