次の方法で共有


SafeHandle 型にはパブリック コンストラクターが必要

これまで、SafeHandle 派生型を P/Invokes および COM メソッドに渡すには、SafeHandle 派生型が ref または out パラメーター、または戻り値の型として渡されるとき、任意の可視性のパラメーターなしのコンストラクターが暗黙的に必要でした。 .NET 7 でのソース生成の相互運用により、この動作が可能になり、DllImportAttribute ベースの P/Invoke からの移行が容易になりました。 同時に、SafeHandle のドキュメントを更新して、実装する方に派生型で public のパラメーターなしのコンストラクターを指定するようお伝えしています。 この破壊的変更により、この推奨事項がソース生成のマーシャリングの要件になっています。

以前の動作

SafeHandle 派生型には、使用時に任意の可視性のパラメーターなしのコンストラクターが必要でした。

新しい動作

SafeHandle 派生型の使用時には、public のパラメーターなしのコンストラクターが必要です。

この型に、public のパラメーターなしのコンストラクターがない場合、相互運用ソース ジェネレーターによってコンパイル エラーが出力されます。

導入されたバージョン

.NET 8 Preview 5

破壊的変更の種類

この変更はソースの互換性に影響を与える可能性があります。

変更理由

相互運用ソース ジェネレーターは、より多くのコードをソース ジェネレーター自体からコア .NET ライブラリにプッシュするように変更されています。 この変更の一環として、相互運用チームは、より保守しやすく理解しやすい相互運用コードのための推奨ガイドラインの適用を開始しています。

SafeHandle 派生型の既存の非 public パラメーターなしのコンストラクターを public に変更してください。

影響を受ける API