C# 拡張メソッドと ref
パラメーター: 歴史的観点
バージョン 7.2 より前の C# 拡張メソッドでは、最初のパラメーターで ref
キーワードを使用できなかったのはなぜですか? この制限は、基本的な設計上の選択に起因しています:
this
パラメータ: 暗黙的な this
パラメータ (拡張メソッドが操作するインスタンス) は値型として扱われ、値渡しの動作がさらに強化されました。 コンパイラーはその受け渡しを最適化し、ref
の変更を防ぎました。C# 7.2 革命
C# 7.2 では次のような重要な変更が導入されました:
ref
パラメータのサポート: 最初のパラメータでの ref
の使用制限が解除されました。これにより、値の型 (構造体) を参照渡しできるようになり、元のデータを直接変更できるようになります。例: 拡張メソッドでの ref
の使用
<code class="language-csharp">// Extension method with ref parameter public static void UpdateValue(this ref MyStruct myStruct, string newValue) { myStruct.Value = newValue; } // Usage MyStruct myStruct = new MyStruct { Value = "Old Value" }; myStruct.UpdateValue("New Value"); // Modifies the original myStruct</code>
主な利点と考慮事項:
この改善により、特に値型を使用する場合、拡張メソッドの能力と柔軟性が強化されます。 ただし:
this
パラメーターは値渡しのままです: 暗黙的な this
パラメーターは引き続き値によって渡されます。C# 7.2 のこの変更により、拡張メソッドの機能が大幅に向上し、値型データを操作するための拡張メソッドの汎用性が高まりました。
以上がC# 7.2 より前は、拡張メソッドの最初のパラメーターで `ref` を使用できなかったのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。