1. ホーム
  2. c#

C#のメソッドが取るように定義できるパラメータの最大数は何ですか?

2023-09-01 13:43:38

質問

C# のメソッドが持つことのできるパラメータの最大数を把握しようとしています。C# の公式ドキュメント、MSDN、および CLR リファレンスのカップルなど、あらゆる場所を調べてみましたが、答えが見つかりません。どなたかこの質問に対する答えをお持ちではないでしょうか?

どのように解決するのですか?

理論的な解答はこちらです。

メソッドの引数をスタックにプッシュするために、コンパイルされたコードは次のMSILオペコードから選択することができます。

ldarg.0

ldarg.1

ldarg.2

ldarg.3

ldarg.S

ldarg

ldarg.0 への ldarg.3 は、最初の 4 つのメソッド引数をスタックにプッシュするために使われます (これには this を含む)。

ldarg.S は8ビットの引数番号を取るので、最大256個の引数をスタックにプッシュするのに使うことができます。

その結果、古い ldarg は最も多くのメソッド引数を扱うことができます。これは符号なし16ビットの引数番号を取るので、有効なMSILに正常にコンパイルできる最大の引数数は 2^16 = 65,536 .

しかし、他の人が指摘しているように、実際の制限はランタイムの実装の詳細に依存します。rmiesen の回答から、現在の .NET の実装では、パラメータの最大数を 2^14 .