ここではC#の可変長引数について学びます。
これはメソッド(関数)で利用する知識で、名前付き引数とか省略可能な引数と同じような話です。
ここではC#の関数について学びます。関数 (function)関数とは、同一の処理を1機能としてまとめ、いつでも呼び出しできるようにする機能です。例えばコードに同じような記述が10回ある場合、同じコードを10回書くのは非効率です。こういった場合に該当するコードを関数化して、いつでも呼び出せるようにします。ちなみに、厳密にはC#に関数は存在せず、それよりも強化された仕組みとしてメソッドが存在します。メソッドは必ずクラスに属する必要があるのですが、今はそこまでの知識は...
ここでは少し特殊な引数の指定方法について学びます。引数なのでメソッド(関数)で利用する知識ですが、知らなくても困らない気もします。名前付き引数(Named arguments)これはメソッドに引数を与える時に各引数を名前を利用して指定します。正直、サンプルコード見てもらったほうが早いと思います。namespace Sample { internal class Display { public void Output(string nam...
paramsキーワード
可変長引数はparamsキーワードを利用して記述します。
paramsとはparametersの略語です。つまり、複数のパラメーター(引数)を意味します。
そして、paramsキーワードが付いた引数は可変長となり、任意の個数を指定できる引数になります。
以下がサンプルコードです。
namespace Sample
{
internal class Display
{
public void Output(params string[] names)
{
// 単なる配列として利用できる
foreach (var name in names)
Console.WriteLine($"名前={name}");
}
}
internal class Program
{
static void Main(string[] args)
{
var d = new Display();
// '可変長引数' で呼び出し
d.Output("ロロナ", "トトリ", "メルル", "ルルア");
}
}
}
構文は以下です。
アクセス修飾子 戻り型 メソッド名(params 配列型 引数名)
重要なのはparamsキーワードと、それを指定した引数が配列型な部分です。
こうやって記述すると、引数的には配列なのに、メソッドの呼び出し時に配列を作る必要がなくなります。
// '可変長引数' で呼び出し
d.Output("ロロナ", "トトリ", "メルル", "ルルア");
つまりは要素数が可変な引数を受け取る配列を作ってるだけです。
なので、引数に指定した値はメソッド内では単なる配列として扱われます。
foreach (var name in names)
Console.WriteLine($"名前={name}");
なお、配列でメソッドを呼び出すこともできれば、個数0で呼ぶこともできます。
namespace Sample
{
internal class Display
{
public void Output(params string[] names)
{
foreach (var name in names)
Console.WriteLine($"名前={name}");
}
}
internal class Program
{
static void Main(string[] args)
{
var d = new Display();
// 0個の指定
d.Output();
// 配列で指定
d.Output(new string[] { "ロロナ", "トトリ", "メルル", "ルルア" });
}
}
}
注意として、仕組みの都合で最後の引数にしかparamsを付けることはできません。
これは当たり前ですが、そうしないと配列の終わりが判断できないからです。
後、型が違うからと言って複数のparams引数を作ることも不可能です。
あとがき
あんまり自分で作ることはないのですが、.NET内のライブラリが可変長引数ってことはよくあります。
◆ C#に関する学習コンテンツ
この記事は参考になりましたか?
コメント