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
.
関連
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み] 配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しない
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] 現在のメソッドを呼び出したメソッドを見つけるにはどうすればよいですか?
-
[解決済み] Visual Studioのコンパイルエラー "mismatch between processor architecture "を修正するにはどうしたらいいですか?
-
[解決済み] ASP.NET Identity - HttpContextにはGetOwinContext用の拡張メソッドがありません。
-
[解決済み] コンストラクタは非同期にできますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パディングが無効で、削除できない?
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み] 関数を終了するには?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] 戻り値のないFuncデリゲート