除了使用嵌套类之外,还有没有其他方法可以在C#中创建子对象?
我正在构建一个名为除了使用嵌套类之外,还有没有其他方法可以在C#中创建子对象?,c#,nested-class,C#,Nested Class,我正在构建一个名为MyLib的类的项目清单,库初始化需要相当长的时间,只需执行一次。之后,可以使用相关的item类随意创建库存中任何item的实例,但是除非对库进行实例化,否则不允许进行item实例化。我发现实现这一点的唯一方法是将item类嵌套在library类中,如下所示,但我想知道是否有更好的方法来实现这一点 public class MyLib { protected string LibFilePath; public MyLib () {
MyLib
的类的项目清单,库初始化需要相当长的时间,只需执行一次。之后,可以使用相关的item类随意创建库存中任何item的实例,但是除非对库进行实例化,否则不允许进行item实例化。我发现实现这一点的唯一方法是将item类嵌套在library类中,如下所示,但我想知道是否有更好的方法来实现这一点
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.
*/
}
}
您也可以这样强制:
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
。您应该查看。这可能会解决你的问题。我之所以建议使用这种方法,是因为它们现在编写的方式不同,您隐藏了存在初始化的事实。对于工厂模式,我们知道有一些逻辑正在发生。感谢您的回复。我通过向LibItem1构造函数添加MyLib类参数,并向MyLib类添加方法来执行LibItem1请求的操作,而不是直接访问MyLib字段,从而解决了这个问题。