Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
我在C#中编写了一些代码,并且注意到了以下情况。我想知道如何使它更优雅,更易于维护。
如果我有以下过载情况
现在说,我需要添加另一个布尔参数。我将不得不修改为
这是一个非常简单的例子。可能还有10个以上的DoSmtg()方法版本。显然,此代码闻起来。尽管重载是非常有效的,但显然由于以下原因,很难维护此代码:
有很多方法可以写
在仔细研究之前(特别是如果方法具有更多参数),直到调用哪种方法才是显而易见的。
方法被不断增长的参数列表污染
添加的新参数需要在许多地方进行更改(考虑从许多不同位置调用的上述方法)
避免这种事情的一种优雅,简单且好方法是什么?
调用函数时,您将执行以下操作:
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
我在C#中编写了一些代码,并且注意到了以下情况。我想知道如何使它更优雅,更易于维护。
如果我有以下过载情况
public void DoSmtg(string a) { DoSmtg(a, 0, 0f); }
public void DoSmtg(string a, int x) { DoSmtg(a, x, 0f); }
public void DoSmtg(string a, int x, double d) { // method logic }
现在说,我需要添加另一个布尔参数。我将不得不修改为
public void DoSmtg(string a) { DoSmtg(a, 0, 0f, false); }
public void DoSmtg(string a, int x) { DoSmtg(a, x, 0f, false); }
public void DoSmtg(string a, int x, double d, bool doIt) { // method logic }
这是一个非常简单的例子。可能还有10个以上的DoSmtg()方法版本。显然,此代码闻起来。尽管重载是非常有效的,但显然由于以下原因,很难维护此代码:
有很多方法可以写
在仔细研究之前(特别是如果方法具有更多参数),直到调用哪种方法才是显而易见的。
方法被不断增长的参数列表污染
添加的新参数需要在许多地方进行更改(考虑从许多不同位置调用的上述方法)
避免这种事情的一种优雅,简单且好方法是什么?
最佳答案
您可以尝试使用默认值在一个函数上添加所有参数,并在调用函数时命名参数:
public void DoSmtg(string a, int x=0, double d=0f, bool doIt=false) {
// method logic
}
调用函数时,您将执行以下操作:
DoSmtg("yo!")
DoSmtg("yo!", d:0.59, doIt:true)