静态类和单例类c#之间的区别

时间:2011-07-16 19:21:28

标签: c# oop static singleton

  

可能重复:
  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.
    }
}

请说明何时需要创建静态类和单例类时。感谢

3 个答案:

答案 0 :(得分:3)

我的意见是:

静态类你需要创建一个类似 API base 的类,所以基本上它只是函数或常量集。对于您班级的用户来说,基本上是静态关于缺乏状态的信号。

Singleton只是一个实例只能是一个的类,以及你提供静态属性和私有默认构造函数的情况(因为你不应该让你的类用户创建对象)它只是设计的后果

希望这有帮助。

问候。

答案 1 :(得分:1)

如果要将类实例化为对象,则使用单例,但一次只需要一个对象。

静态类不会实例化为对象。

答案 2 :(得分:1)

经典(Class.Instance)单例和具有静态可变状态的类 IMO几乎同样糟糕。两者都很少使用。

静态类适用于不访问任何状态的辅助函数,例如MathEnumerable

我对状态单身人士的首选替代方案是通过依赖注入注入单身人士。这样你就不会在假设某些东西是单身的情况下构建你的代码。但恰好是一个单一的实例。因此,如果您将来需要多个代码,那么更改代码很容易。