C#プログラム

【C#4.0~】引数の省略と名前付き引数

C#4.0(Visual Studio 2010)からは引数の省略および名前付き引数が使えるようになりました。

 

引数の省略

なにはともあれ、サンプルをご覧ください。

public static double AddScale(double a, double b, 
                              double scale = 1.0, double offset = 0.0)
{
    return (a + b) * scale + offset;
}

このように、 引数=初期値 のように書くと、その引数は省略して呼びだすことができます。

呼び出し側は

double ans;
ans = AddScale(10, 5);            // ans = 15.0
ans = AddScale(10, 5, 1.0);       // ans = 15.0
ans = AddScale(10, 5, 1.0, 0.0);  // ans = 15.0

のようにすると、どれも同じ結果となります。

もちろん、初期値以外を以下のように

var ans = AddScale(10, 5, 2.0, 1.0); // ans = 31.0

指定することもできます。

 

ただし、省略する引き数の次に省略しない引数を続けることはできません。


public static double AddScale(double a, double b, 
                              double scale = 1.0, double offset)  // これはエラー
{
    return (a + b) * scale + offset;
}

 

名前付き引数

今度はメソッドを呼び出す側のテクニックです。

サンプルとして、前回と同じメソッドを用います。

public static double AddScale(double a, double b, 
                              double scale = 1.0, double offset = 0.0)
{
    return (a + b) * scale + offset;
}

名前付き引数では、引数の名前にコロン(:)を付けてメソッドを呼び出します。

var ans = AddScale(a: 10, b: 5, scale: 1.0, offset: 0.0); // ans = 15.0

この例だと面倒なだけですが、名前を付けて呼び出すと、引数を書く順番はどうでもよくなります。

var ans = AddScale(scale: 2.0, offset: 5.0, b: 5, a: 10); // ans = 35.0

また、引数の省略も同様に出来て、

var ans = AddScale(a: 10, b: 5, offset: 2.0); // ans = 17.0

var ans = AddScale(10, 5, offset: 3.0); // ans = 18.0

と書くことができます。

最初の引数の省略だけでは引数の順番を飛ばして省略(scaleだけを省略)することは出来ませんでしたが、名前付き引数では引数を飛ばして省略することが可能になります。

 

(参考)

名前付き引数と省略可能な引数 - C# プログラミング ガイド
C# の名前付き引数は、位置ではなく名前で引数を指定します。 省略可能な引数は省略できます。

 

← C#2.0からの脱却 へ戻る

コメント

タイトルとURLをコピーしました