使用数据继承类的最佳方法?

时间:2012-05-09 19:02:59

标签: c# winforms inheritance user-controls

不确定这个问题是如何推理或推进的,但我一直在寻找一个好的答案时遇到了麻烦,所以我想在这里试一试。

用语言描述我的问题如下。我有一个程序,Init在启动时是一个“引擎”,是该程序的所有数据和信息的来源。如果我现在写一个新类,那么事情就是现在我必须在创建类时包含它。

public class ClassName(TMEngine engine)
{
......
}

我想知道的是,如果我可以使用“child:parent”类关系将它放在父级上,所以我必须知道的唯一一个就是它的名字。 我已经为FormUserControl编写了类,以便在其中添加一些额外内容,因此有一个父类。

public partial class msgCtrlContainerCtrl : TMUserControl
{
     public msgCtrlContainerCtrl(TMEngine engine)
     {
        ......
     }
}

由于这是一个WinForms应用程序,我在表单中初始化引擎,但希望在其中创建的所有控件都使用相同的引擎。

TMUserControl的“加载事件”中设置引擎现在不起作用,因为UserControl将在“添加”上初始化为UserControl,而{ {1}}事件将在此后面进一步发展。

并且您无法查找控件的父级,因为当您为新控件执行“添加”时尚未初始化父级关系。

所以任何想法如何以最佳方式解决这个问题,以便在我的扩展Load类中将此引擎同步,我在这里调用UserControl或者必须在每个使用它的类中使用它?

1 个答案:

答案 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();
    }
    ...
}