0

我正在将项目清单构建为一个名为 的类MyLib,库初始化需要相当长的时间,并且只需要完成一次。之后,可以使用相关的项目类随意创建库存中任何项目的实例,但是除非实例化库,否则不应允许项目实例化。我发现这可能的唯一方法是将项目类嵌套在库类中,如下所示,但我想知道是否有更好的方法来做到这一点。

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.
         */
    }
}
4

1 回答 1

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
    }
}

如果在这里有一个单例是可以的 - 你对这个类的行为的描述适合这种模式。当然,为了简单起见,使用了通用异常,您可以使用普通的 create-on-first-use-pattern 代替InitializeMyLibGetInstance单独的方法。但是,我猜情况并非如此,因为这样您就不必Libitem1在初始化之前禁止创建 's。

于 2013-10-07T20:17:50.067 回答