Dela via


SafeHandle-typer måste ha en publik konstruktor

Tidigare har överföring av SafeHandle-härledda typer till P/Invoke- och COM-metoder implicit krävt en parameterlös konstruktor oavsett synlighet när en SafeHandle-härledd typ skickas som en ref- eller out-parameter eller som en returtyp. Källgenererad interop i .NET 7 tillät det här beteendet att möjliggöra enklare migrering från DllImportAttribute-baserade P/Invokes. Samtidigt uppdaterade vi SafeHandle-dokumentationen för att be implementerarna att tillhandahålla en public parameterlös konstruktor i sin härledda typ. Den här icke-bakåtkompatibla ändringen gör rekommendationen till ett krav för källgenererad marshalling.

Tidigare beteende

En SafeHandle-härledd typ krävdes att ha en parameterlös konstruktor med valfri synlighet när den användes:

Nytt beteende

En SafeHandle-härledd typ krävs för att ha en public parameterlös konstruktor när den används:

Om typen inte har en public parameterlös konstruktor genererar interop-källgeneratorn ett kompileringsfel.

Version lanserad

Förhandsversion 5 av .NET 8

Typ av brytande ändring

Den här ändringen kan påverka källkompatibilitet.

Orsak till ändring

Interop-källgeneratorerna ändras för att flytta över mer kod från källgeneratorerna in i .NET:s kärnbibliotek. Som en del av den här ändringen börjar interop-teamet tillämpa de rekommenderade riktlinjerna för mer underhållsbar och begriplig interop-kod.

Ändra den befintliga icke-parameterlösapublic konstruktorn för den SafeHandle-härledda typen till public.

Berörda API:er