继承分支独有的共享数据成员
本文关键字:共享 数据成员 分支 继承 | 更新日期: 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>
{
}
这有一个额外的好处,如果您添加任何其他子类,它们将获得自己版本的响应。注意,这是不是线程安全的,因此,如果您选择此解决方案并希望在多线程环境中使用它,则可能需要放置一些线程安全代码。
你可能想看看单例模式。
创建一个类作为单例来保存共享数据。然后让所有三个类都引用这个单例。