Singleton超类

时间:2012-07-17 17:48:09

标签: c# inheritance singleton

我一直在阅读关于单身概念的一些内容。虽然没有完全理解它,但我想在我的基类中使用我的实例getter。

例如,我的类基类RepositoryBase将具有以下方法:

private static RepositoryBase _instance;
public static RepositoryBase Instance
{
    get
    {
        if (_instance == null)
            _instance = new RepositoryBase();
        return _instance;
    }
}

这真的有意义吗?我相信当一个新的子类(例如UserRepository)继承RepositoryBase时,检索Instance时仍然会得到的是一般类RepositoryBase的实例,不是UserRepository的实例。

有什么方法可以让Instance自动返回子类,同时仍然保留在基类中?谢谢!

2 个答案:

答案 0 :(得分:2)

静态成员不是继承的,因为它们是静态的。这就是为什么你对它的看法无论如何都不会起作用。

答案 1 :(得分:2)

您可以尝试使用通用基类

abstract public class RepositoryBase<T>
    where T : RepositoryBase<T>, new()
{
    public static readonly T Instance = new T();
}

public class SpecificRepository : RepositoryBase<SpecificRepository>
{
}

然后像这样使用它

var obj = SpecificRepository.Instance;