2014-11-24 83 views
5

每隔一段時間(如NUnit的的TestCaseData),我看到有一個或幾個構造函數如下目標:爲什麼同時使用params和多對象構造函數?

MyObject(object arg) 
MyObject(object arg1, object arg2) 
MyObject(object arg1, object arg2, object arg3) 
//guess they got tired of writing constructors? 
MyObject(params object[] args) 

如果一個對象有PARAMS構造,不過,什麼是定義前兩者的優點?

+1

只有前一個的優點是你可以給這些參數的默認值沒有別的。 – 2014-11-24 14:31:58

+0

我看到與'string.Format'相同,我純粹猜測它是某種優化(爲了避免僅爲幾個參數使用繁重的'params')。 – Sinatr 2014-11-24 14:32:05

+0

Amol:不是唯一的原因,但仍然值得+1。 – Arithmomaniac 2014-11-24 15:18:59

回答

6

這通常是性能。

在您的示例中,可能是MyObject分配1,2或3個參數,因此開發人員已針對此進行了優化。首先,底層的實現可能被優化,並且在呼叫站點,參數可以被傳遞而沒有任何額外的內存分配。通過使用params,編譯器將不得不插入代碼來創建數組,然後在調用它之前將參數分配給該數組。如果使用1,2或3個參數調用是正常的,那麼你可以避免這種分配。

相關問題