防止单例对象的类型转换

时间:2017-01-18 16:48:13

标签: c# inheritance casting singleton

我扩展了一个单例类,它通过以下调用

获取对单例对象的引用
SingletonClass.singleton

现在我希望每当我在singleton上调用CustomSingletonClass变量时,我都会引用CustomSingletonClass而不是SingletonClass

现在我正在使用类型转换来实现((CustomSingletonClass)CustomSingletonClass.singleton)

我是否必须以某种方式覆盖单例属性?

1 个答案:

答案 0 :(得分:0)

通常单例使用静态属性来获取对象的实例(看起来像你的是SingletonClass.singleton)。

由于它是静态调用,因此无法在继承的对象中覆盖此属性,因为调用将始终在当前类型上完成,而不是在实例上完成(覆盖静态只是无意义)。

您可以尝试通过向单例添加setter并在任何调用之前设置所需的实例来更改其工作方式。

public class A
{
    private static A _instance;

    public static A Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new A();
            }
            return _instance;
        }
        set { _instance = value; }
    }
}

public class B : A
{

}

A.Instance = new B();