ホームに戻る
出典 :
目次 :
C#メソッドにおける可変長引数
引数を可変長とする際は、可変長部を配列とし、params キーワードを付与する。
// 可変長引数 bytes をとるメソッド
// paramsキーワード
// │ 可変長部を配列とする
// ↓ ↓
public static UInt32 Hoge(params byte[] bytes)
{
// 以後、bytes には配列としてアクセスする
}
留意事項
配列を引数として渡すことが可能
可変長引数は配列として取り扱われるため、事前に作成した配列を入力することもできる。
即ち、以下のコード例における Hoge() の呼び出しはいずれも有効、かつ等価である。
// 可変長引数 bytes をとるメソッド
public static UInt32 Hoge(params byte[] bytes)
{
}
:
// 通常の呼び出し(引数を個別に指定する)
UInt32 retA = Hoge(0x11, 0x22, 0x33, 0x44);
// 事前に配列を作成して渡す
byte[] bytes = new byte[]{0x11, 0x22, 0x33, 0x44};
UInt32 retB = Hoge(bytes);
引数なしでの呼び出しが可能
引数なし(空括弧)で呼び出すことも可能である。この場合、メソッドには長さ 0 の空配列が渡される。
// 可変長引数 bytes をとるメソッド
public static UInt32 Hoge(params byte[] bytes)
{
}
// 引数なしでの呼び出し
UInt32 retA = Hoge();
このとき、空配列の作られ方は.NETのバージョンによって異なり、
- .NET Framework 4.5以前 : new T[0]
- .NET Framework 4.6以降 / .NET Core : Array.Empty()
となる。
new T[0]では関数呼び出しのたびにインスタンスが作成されるが、
Array.Empty() ではプログラム中で最初に作成されたインスタンスを使いまわすため、前者に較べてパフォーマンスが良くなる。