Ear*_*rlz 8 c# language-design
在我用C++编程的日子里,我渴望那些甜蜜的可选参数.我知道它们不存在于C#中,但我的问题是为什么.
我认为方法重载是一个糟糕的替代品,使得事情很快就会变得混乱.
void foo(int x,int y,int z=0){
//do stuff...
}
//is so much more clean than
void foo(int x,int y){
foo(x,y,0);
}
void foo(int x,int y,int z){
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
我只是不明白是什么原因.C#编译器显然没有问题支持这个只是微软选择不支持它.
为什么在设计C#时,他们不想支持可选参数?
Jon*_*eet 12
正如Andrey所说,C#4有可选参数和命名参数.然而,值得指出的是,让Anders不愿意将它们包括起来的一个问题 - 即默认值(必须是常量)被包含在调用代码中 - 仍然存在.换句话说,它const
与C#1中可公开访问的值相同.
它还没有,但它在C#4中.这主要与成本有关,以及该功能与语言的主要新部分(例如.Net 2中的Generics,或3中的linq)的匹配程度.可选参数适用于版本4中的新动态内容,因此已包含在内.
引用Eric Lippert(他自己引用Eric Gunnerson)的原因为什么不包括许多看似不错的功能:
(1)这不是减法过程; 我们不是从C++或Java或Haskell开始,然后决定是否要保留它们的一些功能.而且(2)仅仅是一个好的功能是不够的.功能必须如此引人注目,以至于它们值得花费巨大的设计,实施,测试,记录和运输功能的美元成本.它们必须值得使语言复杂化并使将来设计其他功能变得更加困难.