web-dev-qa-db-ja.com

無制限のパラメーターを取るメソッドが、より少ないパラメーターでオーバーロードを定義することがよくあるのはなぜですか?

たとえば、.NETの_System.IO.Path.Combine_メソッドには次のオーバーロードがあります。

_Combine(params String[])
Combine(String, String)
Combine(String, String, String)
Combine(String, String, String, String)
_

最後の3つのポイントは何ですか?

最初のものはすべてをカバーします。よく見ると、paramsキーワードを使用しているようです。 .NET 4までの唯一のバージョンであるため、下位互換性の引数はCombine(String, String)バリアントのみをカバーします。

36
Alex

主な理由はパフォーマンスです。 「無制限の引数」構文シュガーは、実際には文字列の配列です。 1つの文字列のみを渡す場合、なぜ1つの文字列だけで配列を作成するのですか?特に、このメソッドの呼び出しの〜90%が3つ以下の引数で行われる場合、より重い重み配列オブジェクトの必要はありません。メソッドを定義するためにループが必要ないため、メモリが少し軽く、処理時間が少し短くなります。 3つの文字列がある場合は、3つの文字列をコーディングするだけです。

56
Greg Burghardt

構文糖。

ファイルパスを操作する場合、少数の固定値を持つことは非常に一般的です。このような場合は、配列にパッケージ化するよりも、直接使用する方が便利です。

4
Gort the Robot