如何在所有类型的实例之间共享实例成员

时间:2018-02-01 16:39:04

标签: c# inheritance

我有基类,很多继承的类和我的大脑问题:

abstract class Base
{
    abstract Dictionary<string, string> X { get; }
    abstract Dictionary<string, string> Y { get; }
}

class A : Base
{
    override Dictionary<string, string> X { get; } = ... // different
    override Dictionary<string, string> Y { get; } = ... // same for all instances of A
}

class B : Base { ... }

对于A.Y的所有实例,我看到A相同B.Y对于所有实例B都是相同的,等等。 ,对new Dictionary使用Y有点......愚蠢,不必要的内存分配。

如何在所有实例中共享Y?我的大脑想让它成为static并继承。

XY永远不会更改(可能应该是只读字典,但这不是问题)。

1 个答案:

答案 0 :(得分:2)

在派生类中使class A : Base { private static readonly Dictionary<string, string> sharedY = ... override Dictionary<string, string> X { get; } = ... // different override Dictionary<string, string> Y { get => sharedY } } 的实例为private static,并在getter中返回它:

{{1}}

注意:我假设共享字典会填充一次,永远不会再次修改。否则你会遇到很多麻烦,特别是在并发环境中。