我最近发现了自动属性并且非常喜欢它们。此时此刻,我正试图在任何可能的地方使用它们。不仅仅是为了能够在任何地方使用它们,而是更多地了解它们在大多数情况下的工作情况。
现在我正在制作一个单例并想:“嘿,让我们在这里也试试自动属性”。
public class MySingleton
{
public static MySingleton MySingleton { get; private set; }
private MySingleton() {}
static MySingleton() { MySingleton = new MySingleton(); }
}
所以我的问题是:“像这样实现单例是个好主意吗?”
我不是在问一般情况下单例是否是个好主意。
最佳答案
我个人不会那样做。我不喜欢将自动实现的属性与您永远不会调用的私有(private) setter 一起使用,真的您想要一个由只读变量支持的只读属性。只需多一行代码就可以更明确地说明您的意思:
public sealed class MySingleton
{
private static readonly MySingleton mySingleton;
public static MySingleton MySingleton { get { return mySingleton; } }
private MySingleton() {}
static MySingleton() { mySingleton = new MySingleton(); }
}
通过这种方式,甚至没有人想更改单例类以重新分配属性或变量,因为编译器会阻止它们。他们必须添加一个 setter 和/或使变量成为非只读的,这是一个更大的变化 - 希望他们会重新考虑。
换句话说:
- 是的,它会起作用。
- 不,我认为这不是个好主意。
从 C# 6 开始,使用只读自动实现的属性会更容易:
public sealed class MySingleton
{
public static MySingleton MySingleton { get; } = new MySingleton();
private MySingleton() {}
static MySingleton() {}
}
关于c# - 使用自动属性实现单例是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117241/