在 C# 中使用带有接口的单例模式
Using the Singleton pattern with an interface in C#
注意:尽管有很多类似的问题,但我发现没有一个回答了我的问题。
问题:
我想在 C# 中实现一个 class,它按以下方式使用单例模式。
namespace DAL
{
public class CDAL : IDAL
{
/* Singleton Pattern */
private CDAL instance = null;
private CDAL()
{
}
public IDAL getInstance()
{
if (instance != null)
{
return instance;
}
else
{
CDAL.instance = new CDAL();
return CDAL.instance;
}
}
}
}
问题是 instance 和方法 getInstance 应该是 static,因为我想要 'ask' 该实例的 class 而不是对象。
但是使用 c# 我似乎无法在界面中执行任何静态操作。
我该如何解决这个问题?
你是对的,你不能在界面上做任何静态的事情,因为它没有任何意义。
使用抽象 class 而不是接口来实现静态逻辑。
用静态成员创建接口没有任何意义。
接口是一个契约,而静态成员总是通过 class 名称访问,而不是实例名称。简而言之,您的界面不知道哪个正确的实例实现了正确的逻辑。
在您的情况下,您不需要在界面中定义方法 getInstance()
。
与 Singleton
一起使用时的界面通常仅用于 unit testing
目的
注意:尽管有很多类似的问题,但我发现没有一个回答了我的问题。
问题: 我想在 C# 中实现一个 class,它按以下方式使用单例模式。
namespace DAL
{
public class CDAL : IDAL
{
/* Singleton Pattern */
private CDAL instance = null;
private CDAL()
{
}
public IDAL getInstance()
{
if (instance != null)
{
return instance;
}
else
{
CDAL.instance = new CDAL();
return CDAL.instance;
}
}
}
}
问题是 instance 和方法 getInstance 应该是 static,因为我想要 'ask' 该实例的 class 而不是对象。 但是使用 c# 我似乎无法在界面中执行任何静态操作。
我该如何解决这个问题?
你是对的,你不能在界面上做任何静态的事情,因为它没有任何意义。 使用抽象 class 而不是接口来实现静态逻辑。
用静态成员创建接口没有任何意义。
接口是一个契约,而静态成员总是通过 class 名称访问,而不是实例名称。简而言之,您的界面不知道哪个正确的实例实现了正确的逻辑。
在您的情况下,您不需要在界面中定义方法 getInstance()
。
与 Singleton
一起使用时的界面通常仅用于 unit testing
目的