2010-07-13 166 views
1
public ClassType(string type) { 
     Type = type; 
    } 
    public ClassType(string type,bool isArray=false) { 
     Type = type; 
     IsArray = isArray; 
    } 


    ClassType ct = new ClassType("adsf"); 

哪個構造選擇?C#默認可選參數選擇器

回答

7

不需要可選參數的重載。請注意,這裏只是一個「是」或「否」的決定:「沒有自動填充的可選參數」比「自動填充一些可選參數」更可取,但在填入1或2之間沒有偏好。曖昧)

從C#4規範的7.5.3.2節:

否則如果M P的所有參數具有 相應的參數,而 默認參數需要是 取代至少M中的一個可選 參數 Q然後M P優於 M Q

+0

這引發了一個問題,「爲什麼不是編譯時錯誤?」 (我非常確定它是用C++編寫的,C#爲C++允許的更多邊緣情況提供了錯誤。) – 2010-07-13 14:10:56

+0

@James:有一種方法與您給出的參數完全匹配,所以我認爲它被認爲是沒事的。我懷疑它可以更容易地將可選參數添加到現有類型。 – 2010-07-13 14:28:20

+0

順便說一句:我剛剛將該代碼移植到VC++,並確認至少使用該編譯器時,它是一個錯誤。我認爲C++ 98標準使它總是一個錯誤。奇怪的是,C#讓它通過。我想這是爲了讓您將以前需要的參數轉換爲可選參數,但在這種情況下,您真的想知道您是否創建了一個模糊。 – 2010-07-13 14:59:33

1

正如喬恩說,在兩個詞,第一個。比賽是'更清潔'。

+0

是不是「第一個」三個字,不是兩個? ;) – 2010-07-13 13:06:49

+0

是的,但'用三個字'聽起來不太酷:-) – Mau 2010-07-13 13:08:19