Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
- Som en parameter eller returtyp i en metod med
ref
-attribut. - I en metod i ett GeneratedComInterfaceAttribute-attributgränssnitt.
Nytt beteende
En SafeHandle-härledd typ krävs för att ha en public
parameterlös konstruktor när den används:
- Som en parameter eller returtyp i en metod med
ref
-attribut. - I en metod i ett GeneratedComInterfaceAttribute-attributgränssnitt.
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.
Rekommenderad åtgärd
Ändra den befintliga icke-parameterlösapublic
konstruktorn för den SafeHandle
-härledda typen till public
.