2015-07-03 48 views
2

我有兩個方法完全相同,但一個接受PaintEventArgs類參數,而另一個接受PrintPageEventArgs類參數。這迫使我寫出兩種不同的方法,這種方法對於這種細微差別往往有點過分。兩個不同簽名的一種方法

public static void DoAllTasks_Panel(PaintEventArgs e) 
{ 
    // Commands... 
} 

public static void DoAllTasks_Print(PrintPageEventArgs e) 
{ 
    // Commands... 
} 

我試圖將它們合併到使用沒有成功的EventArgs類參數有關的方法,如下所示:

public static void DoAllTasks(EventArgs e) 
{ 
    // Commands... 
} 

是否有可能將它們合併成一個單一的方法?

+0

「沒有成功「:問題到底是什麼? –

回答

4

如果DoAllTasks_PanelDoAllTasks_Print真正做同樣的事情,只是因爲需要兩個不同的簽名存在,那麼標準的做法是創建第三,私有方法做的工作,讓每個調用它:

public static void DoAllTasks_Panel(PaintEventArgs e) 
{ 
    DoCommands(); 
} 

public static void DoAllTasks_Print(PrintPageEventArgs e) 
{ 
    DoCommands(); 
} 

private static DoCommands() 
{ 
    // Commands... 
} 

這樣你就可以很好地分離問題和滿足DRY(不要重複自己)原則:你有單獨的事件處理方法和第三種方法來完成所有常見工作。

5

您可以編寫第三個private方法,將那些您關心的值作爲參數從這些EventArgs中取出,然後使這兩個方法成爲一行即可調用第三個方法。

+0

任何人都可以提供一些示例代碼來說明這種方法嗎?這會幫助我很多。 – codeaviator

+0

@Cebri,請參閱我的答案以獲得解釋。 –

0

由於Actorclavilis提到的 - 讓我們假設你需要訪問圖形成員共有的參數:

創建方法

private void useGraphics (System.Drawing.Graphics g) 
{ 
    g.DrawImage(Image.FromFile("C:\\My Folder\\MyFile.bmp"), ev.Graphics.VisibleClipBounds); 
} 

然後調用如下:

public static void DoAllTasks_Panel(PaintEventArgs e) 
{ 
    useGraphics (e.graphics)  
} 

public static void DoAllTasks(EventArgs e) 
{ 
    useGraphics (e.graphics)  
} 
相關問題