2010-11-16 177 views
4

我有一個本身稱爲clientChat的類來完成基本的網絡工作。我有幾個其他類鏈接到不同的窗體。在我的第一種形式我也參考了聊天類,像這樣的變量:在不創建新實例的情況下引用其他類方法

clientChat cc = new clientChat(); 

一切工作好他們,類已經被初始化,一切都在運動。第一個表格完成後,我有責任提出我的第二個表格,這顯然與新的類文件相關聯。

現在我的問題是,如何在沒有設置類的新實例的情況下引用clientChat類中發生了什麼?我需要將數據從表單傳遞到networkstream,如果我創建了一個新的類實例,那麼不需要與服務器建立新的連接,並且基本上都需要重新開始,因爲它是「新」的?我有點困惑,任何幫助都會很棒,謝謝。 C#在.NET4.0

回答

1

想必你要麼:

  1. 創建從創建和顯示這兩種形式的代碼的對象,並傳遞給這兩種形式到同一實例的引用,或:
  2. 如果您從第一個表單中創建第二個表單,請將對第一個表單引用的實例的引用以某種方式(例如,通過屬性或構造函數)傳遞給第二個表單。
3

你可以在你的程序開始創建的clientChat一個實例,然後,只需通過其引用需要它的類。

3

你可能想看看Singleton的設計模式。 Skeet先生寫了一篇關於如何在C#中實現它的好文章here.(只使用版本4.其最簡單並且工作正常))

+0

這似乎不是一個合適的地方使用單例模式。 – cdhowie 2010-11-16 07:23:27

+0

爲什麼不呢? OP似乎不想創建到服務器的兩個網絡連接,但是在不同的上下文中引用第一個初始化的連接。在這些情況下,我使用了Singleton模式。這不合適嗎? – Jens 2010-11-16 07:25:09

+0

如果項目增長,那麼傳遞引用的方法很快就會失去控制。當我使用它時,每個方法和類都需要通過一個chatClient實例。 =) – Jens 2010-11-16 07:29:15

0

除了@Jens的回答,鏈接頁面上有5種方法,而我認爲我們已經第六次使用了Lazy<T> in C# 4.0

public sealed class Singleton 
{ 
    private Singleton() { } 
    private static readonly Lazy<Singleton> m_instance = new Lazy<Singleton>(() => new Singleton()); 
    public static Singleton Instance 
    { 
     get 
     { 
      return m_instance.Value; 
     } 
    } 
} 
相關問題