【发布时间】:2011-07-02 16:23:15
【问题描述】:
这是我拥有的代码的简化部分:
abstract class DataManager<TValue>
{
protected static Dictionary<string, TValue> Values;
}
然后我有:
class TextManager : DataManager<string>
{
static TextManager()
{
Values = ... // Fill with data
}
}
而且,现在我得到的是 CA1810。我看到了一些解决方案,比如将Values 公开并将它们设置在其他地方,但我不喜欢那样,或者在TextManager 中创建一个静态方法来做同样的事情,但是在程序启动时调用,但我也不喜欢。
我认为从示例中可以明显看出,Values 每个TValue 只应填写一次。那么,您认为这里的最佳解决方案是什么?
【问题讨论】:
-
当另一个类,比如
class AnotherTextManager : DataManager<string>出现并想要以不同的方式初始化值时,你会怎么做? -
对不起,我没有解释我不需要那个...我只需要这两个字符串、整数和
List<T>的管理器...我认为不需要进入更深入的细节。 -
但是编译器是如何知道这一点的呢?
-
那么...我可以做些什么来让编译器“理解”吗? :) 我并不是说我的代码很好,欢迎提出任何建议......
DataManager的剩余代码无关紧要,它适用于Values字段,而TextManager有一些特定于字符串的方法。 -
您还可以使您的属性不是静态的,并使您的 TextManager 成为单例(或者更好的是,如果您使用的是 IOC 容器,您的 TextManager 可以是在单例范围内实例化的常规类)
标签: c# inheritance static constructor abstract