继承分支独有的共享数据成员

本文关键字:共享 数据成员 分支 继承 | 更新日期: 2023-09-27 18:07:53

我有下面的情况。是否有一种简单的方法来设计它,以便数据成员样本在ChildClass1的所有实例之间共享,并且它的单独实例与ChildClass2的所有实例共享?

abstract class BaseClass{
int sample = 0;
}
class ChildClass1: BaseClass{
}
class ChildClass2: BaseClass{
}

我希望产生以下

ChildClass1 a = new ChildClass1();
ChildClass1 b = new ChildClass1();
ChildClass2 c = new ChildClass2(); 
a.sample = 10;
//a.sample = 10, b.sample = 10, c.sample = 0

继承分支独有的共享数据成员

也许这就是你想要的:

public abstract class BaseClass
{
    public abstract int Sample { get; set; }
}  
public class ChildClass1 : BaseClass
{
    private static int mSample = 0;
    public override int Sample 
    { 
        get { return mSample; }
        set { mSample = value; }
    }
}
public class ChildClass2 : BaseClass
{
    private static int mSample = 0;
    public override int Sample 
    { 
        get { return mSample; }
        set { mSample = value; }
    }
}
class Program
{
    static void Main(string[] args)
    {
        var a = new ChildClass1();
        var b = new ChildClass1();
        var c = new ChildClass2();
        a.Sample = 10;
        Console.WriteLine(a.Sample); // 10
        Console.WriteLine(b.Sample); // 10
        Console.WriteLine(c.Sample); // 0
    }
}  

正如我在评论中所说,我认为您的设计存在固有缺陷,但为了提供答案,您可以这样实现:

abstract class BaseClass<TDERIVED>
{
    private static Dictionary<Type, int> sampleDictionary_ = new Dictionary<Type, int>();
    public BaseClass()
    {
    }   // eo ctor

    public int Sample
    {
        get
        {
            return sampleDictionary_.ContainsKey(typeof(TDERIVED)) ? sampleDictionary_[typeof(TDERIVED)] : 0;
        }
        set
        {
            sampleDictionary_[typeof(TDERIVED)] = value;
        }
    }
}
class ChildClass1 : BaseClass<ChildClass1>
{
}
class ChildClass2 : BaseClass<ChildClass2>
{
}

这有一个额外的好处,如果您添加任何其他子类,它们将获得自己版本的响应。注意,这是不是线程安全的,因此,如果您选择此解决方案并希望在多线程环境中使用它,则可能需要放置一些线程安全代码。

你可能想看看单例模式。

创建一个类作为单例来保存共享数据。然后让所有三个类都引用这个单例。