一种方法用于两个不同的签名

本文关键字:两个 一种 方法 用于 | 更新日期: 2023-09-27 18:01:09

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

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

一种方法用于两个不同的签名

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

public static void DoAllTasks_Panel(PaintEventArgs e)
{
    DoCommands();
}
public static void DoAllTasks_Print(PrintPageEventArgs e)
{
    DoCommands();
}
private static DoCommands()
{
    // Commands...
}

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

您可以编写第三个private方法,该方法将您关心的那些 EventArg 中的值作为参数,然后将这两个方法设置为仅调用第三个方法的单行。

正如 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)    
}