2012-01-15 30 views
4

可能重复:
method overloading vs optional parameter in C# 4.0为什么不在C#中编译为等效重载的可选参数?

它好像最喜欢的版本问题自选的利弊可以通过使可选参数简单地转换成重载得到解决。是否有技术原因的C#可选参数没有实现的方式减少到超载?

+0

有什么可以说超载会减少到不存在? – 2012-01-15 00:08:03

+0

可能的重复项:http://stackoverflow.com/questions/3316402/method-overloading-vs-optional-parameter-in-c-sharp-4-0 http://stackoverflow.com/questions/251868/should-you -declare-methods-using-overloads-or-optional-parameters-in-c-sharp-4-0 – keyboardP 2012-01-15 00:10:28

+1

这是一个很好的观点。编译器可能会抛出一个编译错误,即将可选扩展为重载,如果它们存在,则必须删除可选或方法。尽管我很可能错过了一些东西。 – 2012-01-15 00:13:46

回答

2

一个原因是,如果编译器自动将可选参数编​​译到重载中,它将与开发人员自行定义它们的能力相冲突。例如下面的代码是合法的。

class Container { 

    public void Example(int x) { 
    ... 
    } 

    public void Example(int x, int y = 42) { 
    ... 
    } 
} 
+0

或者'public void Example(int x,int y = 42,int z = 43)',其中调用'Example(10,z:44)'将等价于'Example(10,42,44)'?只要有两个参数,'y'是否会被设置为默认值? – 2012-01-15 01:09:02

+3

看起来这个代码是非法的,完全有效的原因可能比它合法的原因更为合理!如果我调用'Container.Example(x)',会发生什么情况。当然,我意识到这是很久以前的设计决定,没有“正确的”答案,而且它永远不会改变,所以这个问题是毫无意义的。 – 2012-01-15 09:03:57

相关问题