2016-10-09 33 views
0

所以我現在創建一個程序,我只需要創建一個特定的類/子類的一個對象。不過,我希望能夠在幾個不同的按鈕「事件」中編輯此對象。 我正在尋找可能在程序啓動後立即在主函數內創建對象,但隨後能夠使用超出「主」範圍的對象,例如按下按鈕時。我環顧四周,我似乎無法找到任何特定的方式,這將工作。我正在用Windows Forms編寫c#。創建一個對象用於範圍外

因此,任何建議將有幫助,謝謝!

+3

[Singleton模式的C#]的可能的複製(http://stackoverflow.com/questions/2667024/singleton-pattern-for-c-sharp) – NineBerry

+0

你在談論Windows窗體? WPF? –

+0

是的,我的意思是windows窗體,應該提到那個!我現在編輯它。 –

回答

0

你正在尋找的是Singleton模式。

它通過暴露在你的類的靜態屬性,總是返回它的同一實例:

public sealed class MySingleInstanceClass 
{ 
    private static readonly MySingleInstanceClass instance = new MySingleInstanceClass(); 

    public static MySingleInstanceClass Instance 
    { 
     get 
     { 
      return instance; 
     } 
    } 

    static MySingleInstanceClass() 
    { 
    } 

    // Use a private constructor so no one besides your own class can create an instance of it 
    private MySingleInstanceClass() 
    { 
    } 

    public string SomeProperty { get; set; } 
} 

所以,現在,無論何時(何地),你需要訪問這個類,你會使用它像:

MySingleInstanceClass.Instance.SomeProperty = "foo"; 
+0

類應ne' sealed'因此它不能從 – NineBerry

+0

繼承我已經閱讀了一些關於Singleton模式,但是我正在構建的類有一個繼承它的子類,以及我希望改變類本身的細節。 從我讀過的內容中,我不能用單身課程做這些,或者我只是誤解了某個地方? –

+0

@ D.Jamieson在這種情況下,我真的需要更詳細的描述你想達到的目標。 Singleton是最乾淨的解決方案,當你在你的應用程序中只需要一個類的實例時。如果你需要繼承,那似乎不是這種情況。但是,如果有意義的話,也可以在一些靜態類上有一個(不是單例控制的)實例指派給某個靜態屬性。實現單例的方法也可以是使用依賴注入容器來處理對象的生命週期。這也將允許繼承。 –