关于OOP:静态类和单例类C#的区别

Difference between static class and singleton class c#

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Difference between static class and singleton pattern?

我们使用静态类进行公共操作。同样的事情也可以在singleton类中完成

这里我给两个一级是静态类,一个是单级。事实上,对于我来说,当一个人去上静态类,而当我们去上单例类的时候,事情就变得越来越难了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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.
    }
}

请解释何时需要创建静态类和何时需要单例类。谢谢


我的看法是:

静态类您需要创建一个类,它将像API库一样对您进行操作,所以基本上它只是函数或常量集。对于类的用户来说,它基本上是关于状态缺失的静态信号。

singleton只是一个实例只能是一个的类,而您提供静态属性和私有默认构造函数的情况(因为您不应该让类用户创建对象)只是设计的一致性。

希望这有帮助。

当做。


经典(Class.Instance单子和具有静态可变状态的类在我看来几乎同样糟糕。两者都没有什么用处。

静态类对于不访问状态的助手函数很好,例如MathEnumerable

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


当您想将一个类实例化为一个对象时,可以使用单例,但一次只需要一个对象。

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