1

不知道这个问题有多菜鸟或高级,但我一直很难找到一个好的答案,所以我想在这里试一试。

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

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

我想知道我是否可以使用“子:父”类关系在父级上使用它,所以我唯一需要知道的就是它的名称。我已经为 theFormUserControl有一些额外的类编写了类,所以有一个父类。

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

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

在“加载事件”中设置引擎TMUserControl现在不起作用,因为UserControl将在“添加”上初始化为UserControl,并且Load事件将在此之后运行得更远。

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

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

4

1 回答 1

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();
    }
    ...
}
于 2012-05-09T19:20:00.000 回答