两种不同签名的一种方法

时间:2015-07-03 21:01:16

标签: c#

我有两个完全相同的方法,但是一个接受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...
}

是否有可能将它们合并为一个方法?

3 个答案:

答案 0 :(得分:5)

您可以编写第三个private方法,将您关注的值从这些EventArgs作为参数,然后将这两个方法作为单行调用,只调用第三个方法。

答案 1 :(得分: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(不要重复自己)原则:您拥有单独的事件处理程序方法和执行所有常见工作的第三种方法。

答案 2 :(得分: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)    
}