[解決済み] C#の関数で、パラメータやオプションのパラメータにデフォルト値を与えることはできますか?
2023-05-25 05:14:56
質問
C#でデフォルトのパラメータを与えることはできますか?
C言語では
void fun(int i = 1)
{
printf("%d", i);
}
パラメータにデフォルト値を与えることは可能か?C#では可能なのか?もし可能なら、関数のオーバーロードを避けることができるでしょうか?
既存の関数にオプションのパラメータを追加することは、常に悪い習慣です。関数を持つクラスを参照する必要があるプロジェクトで、オプションの値でパラメータを変更した場合、メソッドが見つからないという実行時例外がスローされる可能性があります。
これは、関数が多くの場所で使用されている場合、追加のオプション値を追加しても、コードの変更は必要ないと考えるからです。
function Add(int a, int b);
このような方法で呼び出されることになります。
Add(10, 10);
しかし、このようにオプションのパラメータを追加すると
function Add(int a, int b, int c = 0);
とすると、コンパイラは
Add(10, 10, 0);
実際には、次のように呼び出しています。
Add(10, 10)
のように呼び出し、この関数はそのクラスでは利用できないため、実行時例外が発生します。
これは、多くの場所で呼び出される関数に新しいパラメータを追加しているときに発生します。しかし、私はあなたが関数をオーバーロードすることをお勧めします。
オプションのパラメータを持つメソッドは常にオーバーロードする必要があります。また、複数のオプションのパラメータを持つ関数を使用している場合は、パラメータの名前を使用して値を渡すとよいでしょう。
function Add(int a, int b, int c = 0);
この関数は常に次のような方法で呼び出すとよいでしょう。
Add(10, 20, c:30);
どのように解決するのですか?
これはまさに C# で行う方法ですが、この機能は .NET 4.0 で初めて追加されました。
関連
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] Distinct() with lambda?
-
[解決済み] C#でオプションのパラメータを使用するにはどうすればよいですか?
-
[解決済み] C#4 インターフェースで定義されたオプションパラメータは、なぜ実装クラスで強制されないのですか?
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み】C#で、Nullオブジェクトに対して拡張メソッドを呼び出すとどうなるか?
-
[解決済み] Web Api の属性ルーティングにおけるオプションパラメータ
-
[解決済み] C# 4.0では、オーバーロードとオプションのパラメータを使用してメソッドを宣言する必要がありますか?
-
[解決済み] オプションのパラメーターのデフォルト値としてString.Emptyを使用できません。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み] 2つのリストを結合する
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない