【发布时间】:2011-07-09 18:08:45
【问题描述】:
这是一个普遍的编程问题,而不是一个具体的问题。但我会举个例子。假设我正在创建我自己的 MessageBox 类,并且我希望 .Show() 方法可以通过 21 个重载来实现。我可以这样做,如下所示。
public static void Show(string x){}
public static void Show(int x){}
public static void Show(param x){}
public static void Show(param2 x){}
public static void Show(string x, param y){}
.
.
.
.
public static void Show(param x, param y){}
编写 21 个这样的方法变得相当麻烦。有没有更简单的方法来做到这一点?有点像,
public static void Show(string x, string y, int i, param p, ...... param21st z)
{
if (//see the arguments and decide)
//do stuff ignoring rest of the arguments;
else if (//passed arguments are of these type)
//then do this stuff.
else if (so and so)
// so and so.
}
注意:
1. 我知道可能会有这样的论点,比如它不会让我的单个函数变得如此之大,以至于它可以超过单独编写的 21 个不同函数的大小。不。在我的情况下,考虑到我需要在函数下执行的内容非常琐碎(只是函数可能需要大量参数),单独编写是一个更大的麻烦。此外,这个问题也是要了解不同的编码技术。
2. 我知道我正在寻找的简洁风格有其缺点,就我而言,它是我为自己创建的爱好程序。所以可用性并不重要。只是我需要使用可能传递的每种参数组合来执行.Show() 方法。 (这使得编写单独的函数变得如此乏味)。
谢谢。
【问题讨论】:
-
这就是这样做的方法。如果您查看 .NET 源代码,Microsoft 会对其大部分 API 做同样的事情。将大量参数传递给单个方法是一个糟糕的主意。因为很难弄清楚成功执行您的方法实际需要什么,而且这通常是维护的噩梦。对于传递不同值的不同情况,您可以创建一组对象来充当参数构建器(因为没有更好的术语)。
-
@Sergey Akopov 是的,我完全理解这一点。感谢那。就我而言,它是我为自己创建的一个爱好程序。所以可用性并不重要。我对实现更感兴趣。我不明白你评论的第二部分。也许我应该看到代码..
-
可用性在您为业余爱好程序编写的代码中仍然很重要 - 如果您在几个月或几年后重新编写代码会怎样?
-
@William Lawn Stewart,我仍然可以管理它。谢谢你的关心,我理解你的部分。此外,我学到了 C# 的一个重要而美丽的隐藏方面。考虑到@Tim S. 的回答让我的生活变得如此轻松,我永远不会忘记这一点。我将始终使用可选参数,我既不会忘记,也不会发现它们比 C# 的本机方法更困难或更复杂。只是告诉你,使用可选参数方法,我什至可以像往常一样传递参数。
标签: c# syntax overloading argument-passing