2014-10-08 49 views
0

我最近更改了我的項目以包含一個更好的集成接口。我真的被困在如何從我的接口繼承的類中訪問一個表單上的方法(用於更新表單控件)。下面是一些代碼片段,應該有助於清晰。如何在C#中不創建對象的情況下在其他類中使用非靜態方法

//this is the double click event from where i have to call SelectDeal method 

    private void TodayEventsGridView_DoubleClick(object sender, EventArgs e) 

    { 
     DealModule _dealModule = new DealModule(); 

     // i dont want to create an obect of class DealModule() 
     try 
     { 
      this.Cursor = Cursors.WaitCursor; 
      _dealModule.SelectDeal(DealKey); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Warning: " + this.ToString() + " " + System.Reflection.MethodInfo.GetCurrentMethod().Name + "\n" + ex.Message, ex.GetType().ToString()); 
     } 
     finally 
     { 
      this.Cursor = Cursors.Default; 
     } 
    } 
+0

你不知道。不可能。 – 2014-10-08 14:37:47

+0

你能否詳細說明爲什麼你不想創建DealModule類?也許我們可以建議一個更好的解決方案,如果我們更瞭解你的約束。 – JMarsch 2014-10-08 14:38:55

回答

1

如果您要訪問SelectDealDealModule你需要標記SelectDealstatic一個實例。

例如爲:

public class DealModule 
{ 
    // other code 

    public static void SelectDeal(Key dealKey) (/* ... */ } 
} 

如果方法沒有標記static你不能沒有一個實例訪問它。
但是,因爲在界面中不可能有static方法,所以您可能需要使用如下方法來解決此問題。一個singelton:

public class DealModule 
{ 
    private static DealModule instance = null; 
    public static DealModule Instance 
    { 
     get 
     { 
      if (instance == null) 
       instance = new DealModule(); 
      return instance; 
     } 
    } 
    // other code 

    public void SelectDeal(Key dealKey) (/* ... */ } 
} 

然後

DealModule.Instance.SelectDeal(DealKey); 
+0

如果單身人士是一種選擇,是的。從技術上講,你還在創建一個實例。 – 2014-10-08 14:44:37

+0

@PatrickHofman:是的,仍然只有一個實例,但每個事件中只有一個實例,而不是一個實例... – ChrFin 2014-10-08 14:48:17

6

是這樣的,根據定義,是不可能的。實例(非靜態)方法只能在您需要使用類的實例時使用。你需要使用你的類的一個實例,或者聲明這個方法是靜態的。

正如帕特里克在下面說的那樣,您嘗試這樣做的事實可能意味着一個設計缺陷,但很難建議如何在沒有更多上下文的情況下對其進行改進。

我會補充說,在一般情況下,從設計的角度來看,最好是調用一個類的實例(或更好的是一個接口)而不是靜態方法。這增加了可測試性,並幫助您實現鬆耦合,使您的軟件更易於維護。爲什麼你認爲調用靜態方法更適合你的情況?

+0

mike我無法創建類DealModule的實例,因爲其他類正在使用DealModule的方法,並且DealModule包含一些值if我將創建一個實例,然後所有的價值將會沖刷出我需要的其他用途 – 2014-10-10 11:29:42

相關問題