c# – 使用自动属性实现单例是个好主意?

我最近发现了自动属性,并且很喜欢他们.在这一刻,我正在尝试使用它们到处可以.不是真的只是能够使用它们到处,但更多的是看看他们在大多数情况下的工作情况.

现在我正在做一个单身而思想:“嘿,让我们来试试这里的自动属性”.

public class MySingleton
{
    public static MySingleton MySingleton { get; private set; }

    private MySingleton() {}

    static MySingleton() { MySingleton = new MySingleton(); }
}

所以我的问题是:“这样做单身人士是个好主意吗?”

我不是问一个单身人士是否是一个好主意.

解决方法

我不会亲自这样做我不喜欢使用一个私有设置器自动实现的属性,您永远不会调用它们真正需要只读属性由只读变量支持.对于你的意思,只有一行代码更加明确:
public sealed class MySingleton
{
    private static readonly MySingleton mySingleton;
    public static MySingleton MySingleton { get { return mySingleton; } }

    private MySingleton() {}

    static MySingleton() { mySingleton = new MySingleton(); }
}

这样,没有人甚至试图改变单例类来重新分配属性或变量,因为编译器会阻止它们.他们必须添加一个设置器和/或使变量非读取,这是一个更大的变化 – 希望他们会重新考虑.

换一种说法:

>是的,它会奏效
>不,我不认为这是个好主意.

从C#6开始,只读自动实现的属性更容易:

public sealed class MySingleton
{
    public static MySingleton MySingleton { get; } = new MySingleton();    
    private MySingleton() {}         
    static MySingleton() {}
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...