1

我有以下情况。有没有一种简单的方法来设计它,以便在 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
4

3 回答 3

2

也许这样做,你想要什么:

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
    }
}  
于 2013-04-06T16:25:42.553 回答
0

您可能想查看单例模式

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

于 2013-04-12T17:55:29.567 回答
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>
{
}

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

于 2013-04-06T16:22:10.850 回答