假设我有两个单独的类,A和B.
我还有Repository类C,它从文本文件中加载一些信息。例如。它有方法loadLines()
,addLine()
,deleteLine()
。
忽略数据绑定,如何使A和B都在同一个C类上工作?是否可能?
例如,目前,在A类和B类表格中,我有:
var classC = new C();
这会导致重复执行。如果我可以从A或B中使用一个c类副本,那会好得多。
编辑所以使用单例,C类的构造函数何时执行? - 无论哪个班级首先创造它?它只发生在我接受它的时候?
edit1:使用单例模式意味着您应该只在项目解决方案中使用其中一个?我可以有多个吗?
答案 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();