好吧,我对那两件事有点问题
以下情况: 我有一个抽象类“发射器”。这个类有一个静态字典来跟踪从它派生的所有类型。
例如,我有类“LinearEmitter”这个类有一个静态构造函数。此构造函数将typeof(LinearEmitter)添加到字典中。问题是现在,当我想使用来自Emitter的静态字典(静态方法“getMeEmitterFromID(int id)”)时,可能会发生“Emitter”(例如LinearEmitter)的子节点未初始化(即时读取数据)文件,然后从“发射器”中的类中查找id并初始化该实例。
如何确保每个Child-class之前都已初始化?(已在字典中写过)?
当然其他人应该使用这个库,他们也应该使用静态构造函数将他们的类添加到“Emitter”的词典
任何想法?
答案 0 :(得分:2)
Eric Lippert刚刚有一个关于静态构造函数的系列文章。
Static Constructors Part One, Static Constructors Part Two, Static Constructors Part Three, Static Constructors Part Four
在你的情况下总结有用位:静态构造函数由
调用因此,您要么调用Initialize()
之类的静态方法,要么实例化从Emitter
派生的类型的类。
除此之外,我确信有更好的方法来实现您的问题,因为静态初始化程序运行的方式可能会在不同的.NET
/ CLR
版本上发生变化,如果您不依赖于此不必。
答案 1 :(得分:0)
我不会公开Dictionary本身,而是将它作为一个实现细节。然后你可以制作像GetByType(Type typeToGetFromDictionary)
这样的方法。现在,get方法可以懒得加载它还没有的部分。
话虽如此,我同意您应该重新考虑架构的评论,因为这甚至可能不是必需的。