可能重复:
Difference between static class and singleton pattern?
我们使用静态类进行常见操作。单身类也可以做同样的事情
这里我给两个第一类是静态类,一个是单例类。事实上,当我们应该选择静态课程以及何时应该选择单身课程时,事情变得越来越困难。
public sealed class SiteStructure
{
/// <summary>
/// This is an expensive resource we need to only store in one place.
/// </summary>
object[] _data = new object[10];
/// <summary>
/// Allocate ourselves. We have a private constructor, so no one else can.
/// </summary>
static readonly SiteStructure _instance = new SiteStructure();
/// <summary>
/// Access SiteStructure.Instance to get the singleton object.
/// Then call methods on that instance.
/// </summary>
public static SiteStructure Instance
{
get { return _instance; }
}
/// <summary>
/// This is a private constructor, meaning no outsiders have access.
/// </summary>
private SiteStructure()
{
// Initialize members, etc. here.
}
}
static public class SiteStatic
{
/// <summary>
/// The data must be a static member in this example.
/// </summary>
static object[] _data = new object[10];
/// <summary>
/// C# doesn't define when this constructor is run, but it will likely
/// be run right before it is used.
/// </summary>
static SiteStatic()
{
// Initialize all of our static members.
}
}
请说明何时需要创建静态类和单例类时。感谢
答案 0 :(得分:3)
我的意见是:
静态类你需要创建一个类似 API base 的类,所以基本上它只是函数或常量集。对于您班级的用户来说,基本上是静态关于缺乏状态的信号。
Singleton只是一个实例只能是一个的类,以及你提供静态属性和私有默认构造函数的情况(因为你不应该让你的类用户创建对象)它只是设计的后果。
希望这有帮助。
问候。
答案 1 :(得分:1)
如果要将类实例化为对象,则使用单例,但一次只需要一个对象。
静态类不会实例化为对象。
答案 2 :(得分:1)
经典(Class.Instance
)单例和具有静态可变状态的类
IMO几乎同样糟糕。两者都很少使用。
静态类适用于不访问任何状态的辅助函数,例如Math
或Enumerable
。
我对状态单身人士的首选替代方案是通过依赖注入注入单身人士。这样你就不会在假设某些东西是单身的情况下构建你的代码。但恰好是一个单一的实例。因此,如果您将来需要多个代码,那么更改代码很容易。