两种不同签名的一种方法

cod*_*tor 2 c#

我有两个完全相同的方法,但是一个接受一个PaintEventArgs类参数,而另一个接受一个PrintPageEventArgs类参数.这迫使我写出两种不同的方法,这些方法对于这种微小的差异往往有点过分.

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

public static void DoAllTasks_Print(PrintPageEventArgs e)
{
    // Commands...
}
Run Code Online (Sandbox Code Playgroud)

我试图使用EventArgs类参数将它们合并到单个方法中但没有成功,如下所示:

public static void DoAllTasks(EventArgs e)
{
    // Commands...
}
Run Code Online (Sandbox Code Playgroud)

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

Act*_*lis 5

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


Dav*_*rno 5

如果DoAllTasks_Panel并且DoAllTasks_Print真的做同样的事情,并且只是因为需要两个不同的签名而存在,那么标准方法是创建第三个私有方法来完成工作并让每个方法调用它:

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

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

private static DoCommands()
{
    // Commands...
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以很好地分离关注点并满足 DRY(不要重复自己)原则:您拥有单独的事件处理程序方法和执行所有常见工作的第三种方法。