2008-11-20 114 views

回答

4

代碼是否會被其他語言使用?如果是這樣,那麼平衡就會超負荷,同時還要銘記Hamish的回答。特別是,C#不支持可選參數 - 但...

無可否認,這實際上並不會阻止某人在C#中使用您的代碼,這可能會讓他們感到痛苦。

如果有很多參數並且它們在邏輯上表示某些內容,則可能需要考慮將它們封裝在一起,與ProcessProcessStartInfo一起使用的方式相同。由於對象初始值設定項,這對C#來說特別好。

如果這是用於構建,您可能還會將構建器模式視爲其變體。例如,在協議緩衝區我可以這樣做:

Person jon = new Person.Builder { Name="Jon", Age=32, 
            Spouse="Holly", Kids=3 }.Build(); 

這最終是非常具有可讀性,同時仍一氣呵成創建人(在一個表達,而不必變異的人本身 - 確實消息類型是不可變的;它只是不是的構建者)。

+0

重載的另一個「臨」是你可以看到每個超載有多少個引用。 Somenthing不能使用可選參數。 – Burnsys 2015-06-04 03:55:08

8

如果參數是可選的(即重載是整個過程簽名接受的參數的子集),那麼默認或可選參數會更有意義。

如果重載允許參數使用不同類型,或者語義上不同的參數會被例程以不同方式解釋,那麼重載會更有意義。

+0

優秀答案 – baash05 2008-11-20 05:42:31

0

FYI

如果你想一個參數添加到一個是從其他組件調用,那麼函數或方法:

您可以通過附加功能與額外的參數超載。

或者您可以添加一個可選參數,但是:您必須重新編譯調用此函數的所有程序集,即使它們不需要使用新的可選參數!這通常不是人們所期望的(特別是那些用於VB6工作原理的)。基本上,你不能在一個新的可選參數中插入一個函數,並期望它完全向後兼容。此外,據我瞭解,如果您更改默認值是什麼,您需要重建所有調用程序集以使更改工作。