加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 派生静态成员

发布时间:2020-12-15 19:47:49 所属栏目:百科 来源:网络整理
导读:我有一个具有私有静态成员的基类: class Base{ private static Base m_instance = new Base(); public static Base Instance { get { return m_instance; } }} 我想从中派生出多个类: class DerivedA : Base {}class DerivedB : Base {}class DerivedC : B
我有一个具有私有静态成员的基类:

class Base
{
    private static Base m_instance = new Base();
    public static Base Instance
    {
        get { return m_instance; }
    }
}

我想从中派生出多个类:

class DerivedA : Base {}
class DerivedB : Base {}
class DerivedC : Base {}

但是,此时调用DerivedA :: Instance将返回与DerivedB :: Instance和DerivedC :: Instance相同的确切对象.我可以通过在派生类中声明实例来解决这个问题,但是然后每个派生类都需要这样做,而且看起来它应该是不必要的.那么有什么方法可以将所有这些放在基类中吗?可以应用设计模式吗?

解决方法

有一种非常狡猾的方式:

class Base
{
     // Put common stuff in here...
}

class Base<T> : Base where T : Base<T>,new()
{
    private static T m_instance = new T();

    public static T Instance { get { return m_instance; } }
}

class DerivedA : Base<DerivedA> {}
class DerivedB : Base<DerivedB> {}
class DerivedC : Base<DerivedC> {}

这是有效的,因为每个构造类型有一个静态变量 – 例如列表与LT;串GT;是与List< int>不同的类型所以会有单独的静态变量.

我也把它作为派生类的一个实例 – 我不知道这是不是你想要的,但我想我至少可以让它为你服务:)

但总的来说,这是一件令人讨厌的事情.静态变量并不是真正为这种用途而设计的 – 我只是滥用了泛型的特性来获得你所要求的“某种”行为.

另请注意,Base< DerivedA> .Instance将返回与DerivedA.Instance相同的结果 – 属性/变量不“知道”您正在使用DerivedA.Instance.我不知道这对你来说是否重要.

使用额外的非泛型类,您可以编写:

Base t = DerivedA.Instance;
t = DerivedB.Instance;

如果您不需要,请把它拿出来:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读