[解決済み] Console.WriteLine()と多くの引数オーバーロードの必要性?
2023-05-14 02:41:28
疑問点
ドキュメントを見ていて、以下のことに気づきました。
Console.WriteLine()
メソッドにはいくつかのオーバーロードがあることに気づきました。 特に、私の好奇心と部分的な混乱は、これらに関するものです。
public static void WriteLine(string format, params object[] arg);
public static void WriteLine(string format, object arg0);
public static void WriteLine(string format, object arg0, object arg1);
public static void WriteLine(string format, object arg0, object arg1, object arg2);
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3);
冗長な感じがします。最初のオーバーロードの上に他の4つのオーバーロードが必要なのでしょうか? 最初のメソッドは、他のメソッドができることすべてを行うことができます。 最大 4 つの引数 (最後の 1 つ) を処理する追加のオーバーロードを提供することによって取り組もうとしたパフォーマンスの懸念があったのでしょうか。 最大 4 つの引数の配列を通過するオーバーヘッドは、これらのオーバーロードの必要性を提供するのに十分大きいのでしょうか?
どのように解決するのですか?
一般に、最初のオーバーロードが他のオーバーロードに十分対応できることは正しいです。 しかし、これは厳密には正しくありません。
params
キーワードはメソッドグループ結合のような間接的なケースには使用できないからです。 たとえば
delegate void E(string format, object o1);
E e = Console.WriteLine;
は
params
のオーバーロードはこのケースを満たさず、この特定のオーバーロードが存在するときのみ機能します。
public static void WriteLine(string format, object arg0);
これはかなり難解なケースですが。 より重要な理由は以下の通りです。
-
すべての CLI 言語で
params
キーワードをサポートする必要はありません。 オーバーロードを持つことで、単純な WriteLine` 呼び出しに対して手動で配列を作成する必要がなくなり、それらの言語に対する負担が軽減されます。 -
パフォーマンス。 の呼び出しは
params
オーバーロードを呼び出すと、たとえそれがコンパイラによって暗黙のうちに行われたとしても、呼び出し元は配列を割り当てることを強制されます。 .Netではアロケーションは安価ですが、無料ではありません。 このような小さなことはすぐに積み重なります。Console.WriteLine
. 他のオーバーロードを使用することで、このアロケーションを回避する一般的なケースを可能にします。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み】C#のyieldキーワードは何に使われるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】Nullableオブジェクトは値を持たなければならない?