SafeHandle 类型必须具有公共构造函数

过去,当 SafeHandle 派生类型作为 SafeHandleref 参数或作为返回类型传递时,将 out 派生类型传递给 P/Invoke 和 COM 方法隐式需要任何可见性的无参数构造函数。 通过 .NET 7 中源生成的互操作,此行为可以更轻松地从基于 DllImportAttribute 的 P/Invoke 进行迁移。 同时,我们更新了 SafeHandle 文档 ,告知实现者在其派生类型中提供 public 无参数构造函数。 此重大更改使该建议成为源生成的封送的一个要求。

以前的行为

SafeHandle 派生类型在使用时需要具有任何可见性的无参数构造函数:

新行为

SafeHandle 派生类型在使用时需要具有 public 无参数构造函数:

如果类型没有 public 无参数构造函数,则互作源生成器会发出编译错误。

已引入的版本

.NET 8 预览版 5

破坏性变更的类型

此更改可能会影响 源兼容性

更改原因

互操作源生成器正在更改,将更多代码移出源生成器本身并放入核心 .NET 库中。 作为此更改的一部分,互作团队开始强制执行建议的准则,以便更易维护且易于理解的互作代码。

请将public派生类型中的现有非SafeHandle无参数构造函数更改为public

受影响的 API