C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のオプションパラメータとは?デフォルト値とOptional属性の使い方を解説

C#のオプションパラメータとは?

通常、メソッドのパラメータはすべて必須であり、呼び出し時には必ず引数を渡す必要があります。一方、省略可能なパラメータ(オプションパラメータ)を持つメソッドでは、呼び出し時に引数を渡すことが強制されません。つまり、一部の引数を省略したままメソッドを呼び出すことができます。

省略可能なパラメータには、メソッド定義の時点でデフォルト値が設定されています。呼び出し時に引数が渡されなければデフォルト値が使用され、引数が渡された場合はその値で上書きされます。

C#でパラメータを省略可能にする方法はいくつかあります。ここでは代表的な2つの方法を紹介します。

方法1:デフォルト値を指定する

最も一般的な方法は、パラメータ宣言時に「=」でデフォルト値を指定することです。

サンプルコード

using System;
namespace DemoApplication{
    class Demo{
        static void Main(string[] args){
            OptionalMethodWithDefaultValue(5);
            //value2は省略可能なので渡していない
            OptionalMethodWithDefaultValue(5, 10);
            //value2を渡している
            Console.ReadLine();
        }
        public static void OptionalMethodWithDefaultValue(int value1, int value2 = 5){
            Console.WriteLine($"Sum is {value1 + value2}");
        }
    }
}

実行結果

上記コードの出力は次のとおりです。

Sum is 10
Sum is 15

この例では、OptionalMethodWithDefaultValue(int value1, int value2 = 5) の value2 にデフォルト値 5 が設定されています。呼び出し時に value2 の引数を渡さなければデフォルト値の 5 が使われ、引数を渡せばその値がデフォルト値を上書きします。

方法2:[Optional]属性を使う

もう一つの方法として、System.Runtime.InteropServices 名前空間の [Optional] 属性を使う方法があります。

サンプルコード

using System;
using System.Runtime.InteropServices;
namespace DemoApplication{
    class Demo{
        static void Main(string[] args){
            OptionalMethodWithDefaultValue(5);
            OptionalMethodWithDefaultValue(5, 10);
            Console.ReadLine();
        }
        public static void OptionalMethodWithDefaultValue(int value1, [Optional]int value2){
            Console.WriteLine($"Sum is {value1 + value2}");
        }
    }
}

実行結果

上記コードの出力は次のとおりです。

Sum is 5
Sum is 15

この例では、[Optional] 属性によって value2 が省略可能であることを指定しています。なお、[Optional] 属性を使う場合にデフォルト値を明示しないと、その型の既定値(int の場合は 0)が使用される点に注意してください。

注意点:省略可能なパラメータは必須パラメータより後に置く

省略可能なパラメータは、必ずパラメータリストの末尾に配置する必要があります。たとえば、OptionalMethodWithDefaultValue(int value1 = 5, int value2) のように、必須パラメータより前に省略可能なパラメータを記述するとコンパイルエラーになります。

エラーになる例

using System;
namespace DemoApplication{
    class Demo{
        static void Main(string[] args){
            OptionalMethodWithDefaultValue(5);
            OptionalMethodWithDefaultValue(5, 10);
            Console.ReadLine();
        }
        public static void OptionalMethodWithDefaultValue(int value1 = 5, int value2){
            Console.WriteLine($"Sum is {value1 + value2}");
        }
    }
}

エラー:省略可能なパラメータは、すべての必須パラメータより後になければなりません。

  1. Java 9で追加されたOptional.stream()メソッドとは?使い方を実例付きで解説

    Java 9では、Optionalクラスにstream()メソッドが新たに追加され、機能が大幅に強化されました。このメソッドを使うことで、「Optional要素のStream」を「実際に値が存在する要素だけのStream」へ簡単に変換できます。具体的な動作は以下の通りです。Optionalが値を保持している場合 → その値を1つだけ含むStreamを返すOptionalが空(empty)の場合 → 空のStreamを返すこれにより、これまでJava 8で必要だった冗長な条件分岐や三項演算子を使わずに、簡潔で読みやすいコードを書けるようになりました。構文public Stream<T>

  2. Javaのfinalキーワードとは?定数宣言から継承・オーバーライドの制限まで解説

    Javaにおける「final」は、変数・メソッド・クラスに対して「それ以上変更できない」ことを示す修飾子(キーワード)です。主に定数の宣言に使われ、一度値を代入するとプログラム中で再代入することはできません。finalを使った定数の宣言finalキーワードの最も代表的な使い方は、定数の宣言です。例えば、円周率のように値が変わらないものを扱う場合に利用します。final double PIE = 3.14;このように宣言すると、PIEは以降プログラム内で別の値に書き換えられなくなります。もし再代入しようとすると、コンパイルエラーが発生するため、誤って重要な値を変更してしまう事故を防げます。クラス