2012-05-09 45 views
1

不知道這個問題是如何noob或先進的,但我一直在尋找一個很好的答案有點麻煩,所以我想在這裏試一試。用數據繼承類的最佳方法?

用文字來形容我的問題如下。我有一個程序,Init在啓動時是一個「引擎」,它是此程序所有數據和信息的來源。現在的事情是,如果我現在寫一個新的類,那麼當類創建時我必須包含它。

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

我不知道是什麼,如果我如何使用「子:父」的父類關係有這個所以僅此我要知道什麼是其所謂。 我已經寫了FormUserControl兩個類都有一些額外的東西,所以有一個父類。

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

由於這是一個WinForms應用程序初始化我的發動機形式,而是想創造它使用了相同的引擎所有控件。

設置在TMUserControl「加載事件」發動機目前不作爲UserControl將「添加」爲UserControl初始化工作,並且Load事件的背後會這麼多的進一步運行。

而且,當您爲新控件執行「添加」時,您無法查找父控件,因爲父關係尚未初始化。

所以任何想法如何解決這個最好的方式來放置這個引擎同步在我的擴展UserControl類我呼籲TMUserControl這裏或它的劑量必須在每個類使用它?

+4

你從它的聲音尋找單身 – Servy

+1

http://www.dofactory.com/Patterns/PatternSingleton.aspx –

回答

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(); 
    } 
    ... 
} 
+0

這可能就是它!有一個實例。會給它一個鏡頭。謝謝! –

+0

請注意,您將永遠不會明確實例化TMEngine ......它是一個單例,因此您只需開始使用TMEngine.Instance,它將爲您實例化它。 – BeemerGuy