有没有办法在C#中创建子对象而不是使用嵌套类?

时间:2013-10-07 19:59:40

标签: c# nested-class

我正在构建一个名为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.
         */
    }
}

1 个答案:

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

如果在这里有一个单身就行了 - 你对这个类的行为的描述适合这种模式。当然,为了简单起见,使用了通用异常,您可以使用普通的首次使用创建模式而不是InitializeMyLibGetInstance单独的方法。但是,我猜这不是这种情况,因为在初始化之前你不必禁止创建Libitem1