C#初始化get accessor中的对象

时间:2015-01-21 15:30:43

标签: object properties initialization

到目前为止,我将创建一个名为" Names"我们这样:

class Class1
{
    private string[] names;

    public string[] Names
    {
        get
        {
            return names;
        }

        set
        {
            names = value;
        }
    }

    Class1()
    {
        names = new string[] { "Peter", "John" };
    }
}

但是最近我看到一些代码这样做了:

class Class1
{
    private string[] names;

    public string[] Names
    {
        get
        {
            // Initialize object here
            if (names == null)
                names = new string[] { "Peter", "John" };

            return names;
        }

        set
        {
            names = value;
        }
    }

    Class1()
    {
        // No initialization here
    }
}

所以这些人所做的只是在需要时创建一个实例。对我来说似乎是一个很好的编程习惯,可以节省内存和周期。还有助于保持构造函数整洁。 我试图获取更多信息,偶然发现了懒惰初始化,似乎做了几乎相同的事情。我的问题是,这是一个很好的编程实践吗?是否有一些我没有看到的陷阱或者我是否可以愉快地适应这种做法?

1 个答案:

答案 0 :(得分:0)

有一个问题是构造函数是同步的,而getter则没有。所以在多线程的情况下,get可以初始化多个实例。