引用单例类中的私有单例属性

时间:2017-04-05 18:47:35

标签: c# singleton

在下面看到的单例类的情况下,初始化MyList的正确方法是什么?我是直接引用MyList(选项1)字段还是Instance.MyList(选项2)?这里最好的做法是什么?我的直觉说通过实例,但我在猜测自己,无法在任何地方找到明确的答案。

public class Foo
{
    private readonly static Lazy<Foo> _instance =
        new Lazy<Foo>(() => new Foo());

    private List<string> MyList;

    public static Foo Instance
    {
        get { return _instance.Value; }
    }

    private Foo()
    {
        MyList = new List<string> {"a","b","c"}; //Option 1

        Instance.MyList = new List<string> {"a","b","c"};  //Option 2
    }
}

2 个答案:

答案 0 :(得分:4)

首先,我想说无论哪种方式都没问题。话虽这么说,我更喜欢不使用“实例”标识符的选项。实例的概念实际上属于单例类之外的代码。在课堂上,它是一个单身人士的事实应该是众所周知的。因此,指定实例标识符是多余的。

答案 1 :(得分:0)

Singleton模式用于创建只能有一个实例的类型,但仍然被视为类型的实例,而不是被视为类似静态类型的类型。因此,如果MyList是单个实例的一部分,那么它应该是该实例上的实例变量,而不是该类的静态成员。

Singleton模式的一个好处是,与使用静态成员和类相比,它更容易模拟测试,也更容易转换为以后使用多个实例。出于这些目的,使MyList实例成员也有帮助。

如果使用实例,您可以在该实例中编写MyListthis.MyList或从其他位置编写Instance.MyList。这些都不比其他任何一个更正确,它实际上取决于你发现的可读性。重要的是不要混合约定,这是最差的可读性选项。

相关问题