C# 继承分支唯一的共享数据成员?
我的情况如下。是否有一种简单的方法来设计它,以便在ChildClass1的所有实例之间共享数据成员样本,并与ChildClass2的所有实例共享一个单独的实例C# 继承分支唯一的共享数据成员?,c#,oop,inheritance,C#,Oop,Inheritance,我的情况如下。是否有一种简单的方法来设计它,以便在ChildClass1的所有实例之间共享数据成员样本,并与ChildClass2的所有实例共享一个单独的实例 abstract class BaseClass{ int sample = 0; } class ChildClass1: BaseClass{ } class ChildClass2: BaseClass{ } 我希望产生以下结果 ChildClass1 a = new ChildClass1(); ChildClass1 b
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
正如我在评论中所说,我认为您的设计存在固有缺陷,但为了提供答案,您可以这样实现:
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>
{
}
抽象类基类
{
私有静态字典sampleDictionary_u2;=新字典();
公共基类()
{
}//行政长官
公共整数样本
{
得到
{
返回sampleDictionary_u2;.ContainsKey(typeof(TDERIVED))?sampleDictionary_2;[typeof(TDERIVED)]:0;
}
设置
{
sampleDictionary_u2;[typeof(TDERIVED)]=值;
}
}
}
类ChildClass1:基类
{
}
类ChildClass2:基类
{
}
这还有一个额外的优点,即如果您添加任何其他子类,它们将获得自己版本的响应。请注意,这不是线程安全的,因此如果您确实选择此解决方案并希望在多线程环境中使用它,您可能需要将一些线程安全代码放在适当的位置。也许这样做了,但您需要:
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
}
}
你可能想调查一下这个问题
创建一个单独的类来保存共享数据。然后让所有三个类都引用singleton。我不是故意粗鲁,但我闻到了一些糟糕的设计。你能详细说明一下为什么要这样做吗?你想要
静态的(在VB.Net中共享的)?但我同意,这听起来是个坏主意…@Corak,不-他想要一个基类成员(sample
),并根据继承基类的内容使其行为有所不同…:/哦,明白了。因此ChildClass1
和ChildClass2
都有一个私有静态int-mSample
并通过获取/设置静态mSample
覆盖基类。。。应该有用吗?(未经测试)