C# Language
名前付き引数とオプション引数
サーチ…
備考
名前付き引数
Ref:MSDN名前付き引数を使用すると、パラメータリスト内のパラメータの位置ではなくパラメータの名前に引数を関連付けることによって、特定のパラメータの引数を指定できます。
MSDNによると、名前付き引数は、
- パラメータの名前を関連付けることによって、引数を関数に渡すことができます。
- 私たちが常に気づいていないパラメータの位置を覚えておく必要はありません。
- 呼び出された関数のパラメータリスト内のパラメータの順序を見る必要はありません。
- 各引数のパラメータは、その名前で指定できます。
オプションの引数
Ref:MSDNメソッド、コンストラクタ、インデクサ、またはデリゲートの定義では、そのパラメータが必須であるか、オプションであるかを指定できます。すべての呼び出しは、必要なすべてのパラメーターの引数を提供する必要がありますが、オプションのパラメーターの引数は省略できます。
オプションの引数であるMSDNによると、
- その引数がオプションの引数である場合、呼び出しの引数を省略することができます
- すべてのオプション引数には独自のデフォルト値があります
- 値を指定しないと、デフォルト値が使用されます
- Optional Argumentのデフォルト値は、a
- 定数式。
- enumやstructなどの値型でなければなりません。
- フォームのデフォルト(valueType)の式である必要があります。
- パラメータリストの最後に設定する必要があります
名前付き引数
次のことを考えてみましょう。
FindArea(120, 56);
この場合、最初の引数は長さ(つまり120)で、2番目の引数は幅(つまり56)です。そして、その関数で面積を計算しています。関数定義は次のとおりです。
private static double FindArea(int length, int width)
{
try
{
return (length* width);
}
catch (Exception)
{
throw new NotImplementedException();
}
}
したがって、最初の関数呼び出しでは、引数をその位置で渡しました。右?
double area;
Console.WriteLine("Area with positioned argument is: ");
area = FindArea(120, 56);
Console.WriteLine(area);
Console.Read();
これを実行すると、次のような出力が得られます。
ここでは名前付き引数の機能があります。上記の関数呼び出しを参照してください。
Console.WriteLine("Area with Named argument is: ");
area = FindArea(length: 120, width: 56);
Console.WriteLine(area);
Console.Read();
ここでは、メソッド呼び出しで名前付き引数を指定しています。
area = FindArea(length: 120, width: 56);
このプログラムを実行すると、同じ結果が得られます。名前付き引数を使用している場合は、メソッド呼び出しで名前を指定することができます。
Console.WriteLine("Area with Named argument vice versa is: ");
area = FindArea(width: 120, length: 56);
Console.WriteLine(area);
Console.Read();
名前付き引数の重要な使い方の1つは、プログラムでこれを使用すると、コードの可読性が向上することです。あなたの主張が何を意味するのか、それとも何であるのかを単に伝えます。
位置の引数も指定できます。つまり、位置引数と名前付き引数の両方を組み合わせたものです。
Console.WriteLine("Area with Named argument Positional Argument : ");
area = FindArea(120, width: 56);
Console.WriteLine(area);
Console.Read();
上記の例では、長さとして120を渡し、パラメータ幅の名前付き引数として56を渡しました。
いくつかの制限もあります。ここでは、名前付き引数の制限について説明します。
名前付き引数の使用の制限
名前付き引数の指定は、すべての固定引数が指定された後でなければなりません。
固定引数の前に名前付き引数を使用すると、次のようにコンパイル時エラーが発生します。
名前付き引数の指定は、すべての固定引数が指定された後でなければなりません
オプションの引数
先行するものはオプションの引数を持つ関数定義です。
private static double FindAreaWithOptional(int length, int width=56)
{
try
{
return (length * width);
}
catch (Exception)
{
throw new NotImplementedException();
}
}
ここでは、widthの値をオプションとして設定し、値として56を与えました。メモをとると、IntelliSense自体には、下の図のようにオプションの引数が表示されます。
Console.WriteLine("Area with Optional Argument : ");
area = FindAreaWithOptional(120);
Console.WriteLine(area);
Console.Read();
コンパイル中にエラーが発生しなかったことに注意してください。次のように出力されます。
オプション属性の使用。
オプションの引数を実装する別の方法は、 [Optional]
キーワードを使用することです。オプションの引数の値を渡さないと、そのデータ型のデフォルト値がその引数に割り当てられます。 Optional
キーワードは、 "Runtime.InteropServices"名前空間に存在します。
using System.Runtime.InteropServices;
private static double FindAreaWithOptional(int length, [Optional]int width)
{
try
{
return (length * width);
}
catch (Exception)
{
throw new NotImplementedException();
}
}
area = FindAreaWithOptional(120); //area=0
関数を呼び出すと、2番目の引数が渡されず、intのデフォルト値が0なので積が0になるので、結果は0になります。