SafeHandle 型にはパブリック コンストラクターが必要
これまで、SafeHandle 派生型を P/Invokes および COM メソッドに渡すには、SafeHandle
派生型が ref
または out
パラメーター、または戻り値の型として渡されるとき、任意の可視性のパラメーターなしのコンストラクターが暗黙的に必要でした。 .NET 7 でのソース生成の相互運用により、この動作が可能になり、DllImportAttribute ベースの P/Invoke からの移行が容易になりました。 同時に、SafeHandle のドキュメントを更新して、実装する方に派生型で public
のパラメーターなしのコンストラクターを指定するようお伝えしています。 この破壊的変更により、この推奨事項がソース生成のマーシャリングの要件になっています。
以前の動作
SafeHandle 派生型には、使用時に任意の可視性のパラメーターなしのコンストラクターが必要でした。
- LibraryImportAttribute 属性付きメソッドの
ref
またはout
パラメーターまたは戻り値の型として。 - GeneratedComInterfaceAttribute 属性付きインターフェイスのメソッド内で。
新しい動作
SafeHandle 派生型の使用時には、public
のパラメーターなしのコンストラクターが必要です。
- LibraryImportAttribute 属性付きメソッドの
ref
またはout
パラメーターまたは戻り値の型として。 - GeneratedComInterfaceAttribute 属性付きインターフェイスのメソッド内で。
この型に、public
のパラメーターなしのコンストラクターがない場合、相互運用ソース ジェネレーターによってコンパイル エラーが出力されます。
導入されたバージョン
.NET 8 Preview 5
破壊的変更の種類
この変更はソースの互換性に影響を与える可能性があります。
変更理由
相互運用ソース ジェネレーターは、より多くのコードをソース ジェネレーター自体からコア .NET ライブラリにプッシュするように変更されています。 この変更の一環として、相互運用チームは、より保守しやすく理解しやすい相互運用コードのための推奨ガイドラインの適用を開始しています。
推奨される操作
SafeHandle
派生型の既存の非 public
パラメーターなしのコンストラクターを public
に変更してください。
影響を受ける API
.NET