在 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 目的