SafeHandle 類型必須具有公用建構函式
在過去,當 SafeHandle
衍生的類型傳遞為 ref
或 out
參數或傳回型別時,將 SafeHandle 衍生的類型傳遞至 P/Invokes 和 COM 方法隱含需要任何可見度的無參數建構函式。 .NET 7 中來源產生的 interop 可讓此行為更容易從 DllImportAttribute 型 P/Invokes 進行移轉。 同時,我們已更新 SafeHandle 文件,告知實作者在其衍生類型中提供 public
無參數建構函式。 這項中斷性變更會針對來源產生的封送處理提出建議。
先前的行為
SafeHandle 衍生的類型在以下情況使用時必須具有任何可見度的無參數建構函式:
- 做為
ref
或out
參數或 LibraryImportAttribute 屬性方法的傳回型別。 - 在 GeneratedComInterfaceAttribute 屬性介面的方法中。
新的行為
SafeHandle 衍生的類型在以下情況使用時必須具有 public
的無參數建構函式:
- 做為
ref
或out
參數或 LibraryImportAttribute 屬性方法的傳回型別。 - 在 GeneratedComInterfaceAttribute 屬性介面的方法中。
如果類型沒有 public
無參數建構函式,interop 來源產生器就會發出編譯錯誤。
導入的版本
.NET 8 Preview 5
中斷性變更的類型
此變更可能會影響來源相容性。
變更原因
Interop 來源產生器正在變更,以將更多程式碼從來源產生器本身推送至核心 .NET 程式庫。 在這項變更中,interop 小組開始強制執行建議的指導方針,以取得更容易維護且可理解的 interop 程式碼。
建議的動作
將 SafeHandle
衍生的類型上現有的非 public
無參數建構函式變更為 public
。