我正在构建一个名为MyLib
的类的项目清单,库初始化需要相当长的时间,只需要完成一次。之后,可以使用相关的项目类随意创建清单中任何项目的实例,但是除非实例化库,否则不应允许项目实例化。我发现这是可能的唯一方法是将item类嵌套在库类中,如下所示,但我想知道是否有更好的方法来实现这一点。
public class MyLib
{
protected string LibFilePath;
public MyLib ()
{
/* Time-consuming Library initialization code here
needs to be done only once
LibFilePath initialized
etc.
*/
}
public class LibItem1
{
/* Must ensure that MyLib is initialized
* Must have access to Library information like LibFilePath, etc.
*/
}
}
答案 0 :(得分:1)
您也可以强制执行此操作:
public class MyLib
{
public static void InitializeMyLib(...)
{
if (instance != null)
{
throw new InvalidOperationException("Already initialized");
}
instance = new MyLib(...);
}
public static MyLib GetInstance()
{
if (instance == null)
{
throw new InvalidOperationException("Not initialized");
}
return instance;
}
private MyLib(...)
{
...
}
private static MyLib instance;
}
public class LibItem1
{
public LibItem1()
{
MyLib.GetInstance(); // will throw if doesn't exist
}
}
如果在这里有一个单身就行了 - 你对这个类的行为的描述适合这种模式。当然,为了简单起见,使用了通用异常,您可以使用普通的首次使用创建模式而不是InitializeMyLib
和GetInstance
单独的方法。但是,我猜这不是这种情况,因为在初始化之前你不必禁止创建Libitem1
。