サーチ…


備考

名前付き引数

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になります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow