1. ホーム
  2. c#

[解決済み] 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 で初めて追加されました。