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#2.0からの脱却 へ戻る