2012-01-15 42 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

相關問題