【问题标题】:Prevent typecasting of singleton object防止单例对象的类型转换
【发布时间】:2017-01-18 16:48:12
【问题描述】:

我扩展了一个单例类,该类通过以下调用获取对单例对象的引用

SingletonClass.singleton

现在我希望每次在我的CustomSingletonClass 上调用singleton 变量时,我都会得到对CustomSingletonClass 的引用,而不是SingletonClass

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

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

【问题讨论】:

  • 单例是字段还是属性?
  • 如果你把所有的代码都贴出来会很有帮助

标签: c# inheritance casting singleton


【解决方案1】:

通常单例使用静态属性来获取对象的实例(好像你的是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();

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多