Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 继承分支唯一的共享数据成员?_C#_Oop_Inheritance - Fatal编程技术网

C# 继承分支唯一的共享数据成员?

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

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

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

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
覆盖
基类。。。应该有用吗?(未经测试)