使用单独的类,全局/静态类?

时间:2010-03-02 02:27:27

标签: c# visual-studio-2008 class class-design

假设我有两个单独的类,A和B.

我还有Repository类C,它从文本文件中加载一些信息。例如。它有方法loadLines()addLine()deleteLine()

忽略数据绑定,如何使A和B都在同一个C类上工作?是否可能?

例如,目前,在A类和B类表格中,我有:

var classC = new C();

这会导致重复执行。如果我可以从A或B中使用一个c类副本,那会好得多。

编辑所以使用单例,C类的构造函数何时执行? - 无论哪个班级首先创造它?它只发生在我接受它的时候?

edit1:使用单例模式意味着您应该只在项目解决方案中使用其中一个?我可以有多个吗?

2 个答案:

答案 0 :(得分:6)

您可以使用Singleton模式,或者如果您想要使用依赖注入框架的路径(这不仅仅是创建单例,而且非常值得研究),大多数DI容器都可以创建只有一个对象的实例。

class C {

    public static readonly C Instance = new C();

    private C() {
    }

}

然后你会像:

一样使用它
private void A_Load(object sender, EventArgs e) {
    var classC = C.Instance;
}

private void B_Load(object sender, EventArgs e) {
    var classC = C.Instance;
}

答案 1 :(得分:1)

如果您想确保只运行一个C类实例,可以使用singleton pattern

通过使类C上的构造函数为private,并使用公共静态方法来处理为您提供正确的C实例,您可以确保A和B始终获得相同的实例:

public class C
{
    private static C instance;

    private C()
    {
        // do some stuff
    }

    public static C GetInstance()
    {
        if(instance==null)
           instance = new C();

        return instance;
    }
}

在A和B中你可以这样做:

C theSameInstanceOfC = C.GetInstance();