不确定这个问题是如何推理或推进的,但我一直在寻找一个好的答案时遇到了麻烦,所以我想在这里试一试。
用语言描述我的问题如下。我有一个程序,Init在启动时是一个“引擎”,是该程序的所有数据和信息的来源。如果我现在写一个新类,那么事情就是现在我必须在创建类时包含它。
public class ClassName(TMEngine engine)
{
......
}
我想知道的是,如果我可以使用“child:parent”类关系将它放在父级上,所以我必须知道的唯一一个就是它的名字。
我已经为Form
和UserControl
编写了类,以便在其中添加一些额外内容,因此有一个父类。
public partial class msgCtrlContainerCtrl : TMUserControl
{
public msgCtrlContainerCtrl(TMEngine engine)
{
......
}
}
由于这是一个WinForms应用程序,我在表单中初始化引擎,但希望在其中创建的所有控件都使用相同的引擎。
在TMUserControl
的“加载事件”中设置引擎现在不起作用,因为UserControl
将在“添加”上初始化为UserControl
,而{ {1}}事件将在此后面进一步发展。
并且您无法查找控件的父级,因为当您为新控件执行“添加”时尚未初始化父级关系。
所以任何想法如何以最佳方式解决这个问题,以便在我的扩展Load
类中将此引擎同步,我在这里调用UserControl
或者必须在每个使用它的类中使用它?
答案 0 :(得分:1)
你在找这样的东西吗?
public class TMEngine
{
private TMEngine() {}
private static TMEngine instance;
public static TMEngine Instance
{
get
{
if (instance == null)
instance = new TMEngine();
return instance;
}
}
public string GetSomeStringData()
{
...
}
}
这将是您的引擎...所以您可以继续构建您想要的方式 现在,您需要一个将使用引擎的所有类的摘要。
public abstract class EnginedClass
{
public static TMEngine Engine { get { return TMEngine.Instance; } };
}
然后使用它来实现你的类:
public MyNewClass : EnginedClass
{
...
public string GetSomeData()
{
...
return Engine.GetSomeStringData();
}
...
}