Delen via


Fouten en waarschuwingen met betrekking tot partial type- en partial liddeclaraties

Er zijn talloze fouten met betrekking tot partial type- en partial liddeclaraties:

  • CS0260: Ontbrekende gedeeltelijke wijziging bij declaratie van het type; een andere gedeeltelijke declaratie van dit type bestaat
  • CS0261: Gedeeltelijke declaraties van het type moeten alle klassen, alle structs of alle interfaces zijn
  • CS0262: Gedeeltelijke declaraties van het type hebben conflicterende toegankelijkheidsaanpassingen
  • CS0263: Gedeeltelijke declaraties van het type mogen geen verschillende basisklassen opgeven
  • CS0264: Gedeeltelijke declaraties van het type moeten dezelfde typeparameternamen in dezelfde volgorde hebben
  • CS0265: Gedeeltelijke declaraties van het type hebben inconsistente beperkingen voor de typeparameter 'typeparameter'
  • CS0267: De modifier kan alleen direct vóór het retourtype 'class', 'record', 'struct', 'interface' of een methode of eigenschap worden weergegeven.partial
  • CS0282: Er is geen gedefinieerde volgorde tussen velden in meerdere declaraties van gedeeltelijke klasse of struct 'type'. Als u een volgorde wilt opgeven, moeten alle exemplaarvelden zich in dezelfde declaratie bevinden.
  • CS0501: 'lidfunctie' moet een hoofdtekst declareren omdat deze niet is gemarkeerd abstract, externof partial
  • CS0750: Een gedeeltelijk lid kan de wijzigingsfunctie 'abstract' niet hebben.
  • CS0751: Een gedeeltelijk lid moet worden gedeclareerd in een gedeeltelijk class of gedeeltelijk struct
  • CS0754: Een gedeeltelijk lid kan een interfacemethode niet expliciet implementeren.
  • CS0755: Beide gedeeltelijke methodedeclaraties moeten uitbreidingsmethoden zijn of geen van beide een uitbreidingsmethode.
  • CS0756: Een gedeeltelijke methode heeft mogelijk niet meerdere definiërende declaraties.
  • CS0757: Een gedeeltelijke methode heeft mogelijk niet meerdere uitvoeringsdeclaraties.
  • CS0759: Er is geen definitiedeclaratie gevonden voor de uitvoering van een gedeeltelijke methode.
  • CS0761: Declaraties van method<T> gedeeltelijke methoden hebben inconsistente typeparameterbeperkingen.
  • CS0762: Kan geen gedelegeerde maken op basis van de methode omdat het een gedeeltelijke methode is zonder een implementatiedeclaratie
  • CS0763: Beide gedeeltelijke methodedeclaraties moeten of static geen van beide zijn static.
  • CS0764: Beide gedeeltelijke methodedeclaraties moeten zijn unsafe of beide mogen niet zijn unsafe
  • CS1067: Gedeeltelijke declaraties moeten dezelfde typeparameternamen en variantieaanpassingen in dezelfde volgorde hebben.
  • CS8142: Beide gedeeltelijke liddeclaraties moeten dezelfde tuple-elementnamen gebruiken.
  • CS8663: Beide gedeeltelijke liddeclaraties moeten alleen-lezen zijn of geen van beide kunnen alleen-lezen zijn
  • CS8796: Gedeeltelijke methode moet toegankelijkheidsaanpassingen hebben omdat deze een niet-ongeldig retourtype heeft.
  • CS8795: Gedeeltelijk lid moet een implementatieonderdeel hebben omdat het toegankelijkheidsaanpassingen heeft.
  • CS8797: Gedeeltelijke methode moet toegankelijkheidsaanpassingen hebben omdat deze parameters 'out' bevat.
  • CS8798: Gedeeltelijke methode moet toegankelijkheidsaanpassingen hebben omdat deze een modifier 'virtual', 'override', 'sealed'new, '' of 'extern' heeft.
  • CS8799: Beide gedeeltelijke liddeclaraties moeten identieke toegankelijkheidsaanpassingen hebben.
  • CS8800: Beide gedeeltelijke liddeclaraties moeten identieke combinaties van virtual, overrideen sealednew modifiers hebben.
  • CS8817: Beide gedeeltelijke methodedeclaraties moeten hetzelfde retourtype hebben.
  • CS8818: Gedeeltelijke liddeclaraties moeten overeenkomende ref retourwaarden hebben.
  • CS8863: Slechts één gedeeltelijke typedeclaratie kan een lijst met parameters hebben
  • CS8988: De wijziging van de scoped parameter komt niet overeen met een gedeeltelijke definitie.
  • CS9248: Gedeeltelijke eigenschap moet een implementatieonderdeel hebben.
  • CS9249: Gedeeltelijke eigenschap moet een definitieonderdeel hebben.
  • CS9250: Een gedeeltelijke eigenschap heeft mogelijk niet meerdere definiërende declaraties en kan geen automatische eigenschap zijn.
  • CS9251: Een gedeeltelijke eigenschap heeft mogelijk niet meerdere uitvoeringsdeclaraties
  • CS9252: Eigenschapstoegangsfunctie moet worden geïmplementeerd omdat deze is gedeclareerd in het definitieonderdeel
  • CS9253: Eigenschapstoegangsfunctie implementeert geen toegangsbeheerprogramma dat is gedeclareerd in het definitieonderdeel
  • CS9254: Eigenschapstoegangsfunctie moet overeenkomen met het definitieonderdeel
  • CS9255: Beide gedeeltelijke eigenschapsdeclaraties moeten hetzelfde type hebben.
  • CS9256: Declaraties van gedeeltelijke eigenschappen hebben handtekeningverschillen.
  • CS9257: Beide gedeeltelijke eigenschapsdeclaraties moeten vereist zijn of geen van beide zijn vereist
  • CS9258: In deze taalversie wordt hetfield trefwoord '' gekoppeld aan een gesynthetiseerd backingveld voor de eigenschap. Gebruik in plaats daarvan 'this.field' of '@field' om te voorkomen dat er een gesynthetiseerd backingveld wordt gegenereerd en om naar het bestaande lid te verwijzen.
  • CS9263: Een gedeeltelijke eigenschap kan geen initialisatiefunctie hebben voor zowel de definitie als de implementatie.

De volgende waarschuwingen kunnen worden gegenereerd voor eigenschappen met veldsteun:

  • CS9264: Niet-nullable eigenschap moet een niet-null-waarde bevatten bij het afsluiten van de constructor. Overweeg om de 'vereiste' modifier toe te voegen of de eigenschap als nullable te declareren of kenmerken toe[field: MaybeNull, AllowNull] te voegen.*
  • CS9266: De ene toegangsfunctie van de eigenschap moet 'field' gebruiken omdat de andere accessor deze gebruikt.

In de volgende secties worden de oorzaak en oplossingen voor deze fouten en waarschuwingen uitgelegd.

Gedeeltelijke typen

Uw gedeeltelijke typedeclaratie kan ertoe leiden dat de compiler de volgende waarschuwing verzendt:

  • CS0282: Er is geen gedefinieerde volgorde tussen velden in meerdere declaraties van gedeeltelijk class of struct type. Als u een volgorde wilt opgeven, moeten alle exemplaarvelden zich in dezelfde declaratie bevinden.

Voor een gedeeltelijk type moet het partial trefwoord direct voorafgaan classaan , recordof structinterface. De compiler verzendt een fout als deze in een andere volgorde wordt weergegeven. Aanvullend:

  • Alle declaraties van een gedeeltelijk type moeten overeenkomen met het type (class, , structrecord structrecord class, , of ). readonly structreadonly record struct
  • Alle declaraties moeten de partial wijzigingsfunctie bevatten.
  • De declaraties voor een algemeen gedeeltelijk type moeten dezelfde typeparameters in dezelfde volgorde bevatten.

Sommige delen van de declaratie hoeven niet te worden herhaald voor alle declaraties voor een type. Als deze elementen echter op meerdere partial declaraties worden herhaald, moeten ze overeenkomen met:

  • Eventuele toegangsaanpassingen, zoals public.
  • Een basisklasse of geïmplementeerde interfaces.
  • Eventuele beperkingen voor typeparameters.

Een primaire constructor kan maximaal één declaratie voor een gedeeltelijk type worden gedeclareerd.

De compiler waarschuwt u als u meerdere velden hebt gedeclareerd in meerdere bestanden voor een partial struct type. Als de indelingsvolgorde belangrijk is, moet u alle velden in hetzelfde bestand declareren. Als de volgorde niet van belang is, kunt u de System.Runtime.InteropServices.StructLayoutAttribute waarde gebruiken.LayoutKind.Auto

Gedeeltelijke leden

  • CS0750: Een gedeeltelijk lid kan de wijzigingsfunctie 'abstract' niet hebben.
  • CS0751: Een gedeeltelijk lid moet worden gedeclareerd in een gedeeltelijk class of gedeeltelijk struct
  • CS0754: Een gedeeltelijk lid kan een interfacemethode niet expliciet implementeren.
  • CS0763: Beide gedeeltelijke methodedeclaraties moeten of static geen van beide zijn static.
  • CS0764: Beide gedeeltelijke methodedeclaraties moeten zijn unsafe of beide mogen niet zijn unsafe
  • CS8142: Beide gedeeltelijke liddeclaraties moeten dezelfde tuple-elementnamen gebruiken.
  • CS8663: Beide gedeeltelijke liddeclaraties moeten alleen-lezen zijn of geen van beide kunnen alleen-lezen zijn
  • CS8799: Beide gedeeltelijke liddeclaraties moeten identieke toegankelijkheidsaanpassingen hebben.
  • CS8800: Beide gedeeltelijke liddeclaraties moeten identieke combinaties van virtual, overrideen sealednew modifiers hebben.
  • CS8818: Gedeeltelijke liddeclaraties moeten overeenkomende ref retourwaarden hebben.
  • CS8988: De wijziging van de scoped parameter komt niet overeen met een gedeeltelijke definitie.

Gedeeltelijke leden hebben twee declaraties. De verklaring zonder uitvoering is de aangifte. De verklaring met de uitvoering is de uitvoeringsverklaring. Gedeeltelijke leden zijn alleen toegestaan in een partial type. Gedeeltelijke leden kunnen niet zijn abstract. Gedeeltelijke leden kunnen geen interface expliciet implementeren. Beide declaraties van een gedeeltelijk lid moeten identieke handtekeningen hebben. Zo kunnen beide of geen van beide declaraties de static of unsafe modifiers bevatten.

Gedeeltelijke methoden

  • CS0501: 'lidfunctie' moet een hoofdtekst declareren omdat deze niet is gemarkeerd abstract, externof partial
  • CS0755: Beide gedeeltelijke methodedeclaraties moeten uitbreidingsmethoden zijn of geen van beide een uitbreidingsmethode.
  • CS0756: Een gedeeltelijke methode heeft mogelijk niet meerdere definiërende declaraties.
  • CS0757: Een gedeeltelijke methode heeft mogelijk niet meerdere uitvoeringsdeclaraties.
  • CS0759: Er is geen definitiedeclaratie gevonden voor de uitvoering van een gedeeltelijke methode.
  • CS0761: Declaraties van method<T> gedeeltelijke methoden hebben inconsistente typeparameterbeperkingen.
  • CS0762: Kan geen gedelegeerde maken op basis van de methode omdat het een gedeeltelijke methode is zonder een implementatiedeclaratie
  • CS1067: Gedeeltelijke declaraties moeten dezelfde typeparameternamen en variantieaanpassingen in dezelfde volgorde hebben.
  • CS8796: Gedeeltelijke methode moet toegankelijkheidsaanpassingen hebben omdat deze een niet-ongeldig retourtype heeft.
  • CS8795: Gedeeltelijk lid moet een implementatieonderdeel hebben omdat het toegankelijkheidsaanpassingen heeft.
  • CS8797: Gedeeltelijke methode moet toegankelijkheidsaanpassingen hebben omdat deze parameters 'out' bevat.
  • CS8798: Gedeeltelijke methode moet toegankelijkheidsaanpassingen hebben omdat deze een modifier 'virtual', 'override', 'sealed'new, '' of 'extern' heeft.
  • CS8817: Beide gedeeltelijke methodedeclaraties moeten hetzelfde retourtype hebben.

Voor bepaalde partial methodedeclaraties is geen uitvoeringsdeclaratie vereist. Dat wil zeggen, als het lid retourneertvoid, geen toegangsmodifiers declareert (inclusief de standaard private modifier), en geen van de virtual, override, of sealednew modifiers bevat. Anders moet elke gedeeltelijke methode zowel de declaratie als de uitvoering van declaraties bevatten.

Wanneer een gedeeltelijke methode een uitvoeringsdeclaratie bevat, moeten beide declaraties identiek zijn. Er kan precies één uitvoeringsdeclaratie worden gedefinieerd.

Gedeeltelijke eigenschappen

De volgende fouten geven fouten aan in uw gedeeltelijke eigenschaps- of indexeerfunctiedeclaraties:

  • CS9248: Gedeeltelijke eigenschap moet een implementatieonderdeel hebben.
  • CS9249: Gedeeltelijke eigenschap moet een definitieonderdeel hebben.
  • CS9250: Een gedeeltelijke eigenschap heeft mogelijk niet meerdere definiërende declaraties en kan geen automatische eigenschap zijn.
  • CS9251: Een gedeeltelijke eigenschap heeft mogelijk niet meerdere uitvoeringsdeclaraties
  • CS9252: Eigenschapstoegangsfunctie moet worden geïmplementeerd omdat deze is gedeclareerd in het definitieonderdeel
  • CS9253: Eigenschapstoegangsfunctie implementeert geen toegangsbeheerprogramma dat is gedeclareerd in het definitieonderdeel
  • CS9254: Eigenschapstoegangsfunctie moet overeenkomen met het definitieonderdeel
  • CS9255: Beide gedeeltelijke eigenschapsdeclaraties moeten hetzelfde type hebben.
  • CS9257: Beide gedeeltelijke eigenschapsdeclaraties moeten vereist zijn of geen van beide zijn vereist

De volgende waarschuwing geeft een handtekeningverschil aan in de declaratie en implementatie van declaraties in een gedeeltelijke eigenschap:

  • CS9256: Declaraties van gedeeltelijke eigenschappen hebben handtekeningverschillen.

Een gedeeltelijke eigenschap of indexeerfunctie moet zowel een declaratiedeclaratie als een uitvoeringsdeclaratie hebben. De handtekeningen voor beide declaraties moeten overeenkomen. Omdat de declareringsdeclaratie dezelfde syntaxis gebruikt als een automatisch geïmplementeerde eigenschap, kan de implementatiedeclaratie geen automatisch geïmplementeerde eigenschap zijn. De accessors moeten ten minste één toegangstekst hebben. Vanaf C# 13 kunt u het field trefwoord gebruiken om één accessor te declareren met behulp van een beknopte syntaxis:

public partial int ImplementingDeclaration { get => field; set; }

eigenschappen met veldsteun

  • CS9258: In deze taalversie wordt hetfield trefwoord '' gekoppeld aan een gesynthetiseerd backingveld voor de eigenschap. Gebruik in plaats daarvan 'this.field' of '@field' om te voorkomen dat er een gesynthetiseerd backingveld wordt gegenereerd en om naar het bestaande lid te verwijzen.
  • CS9263: Een gedeeltelijke eigenschap kan geen initialisatiefunctie hebben voor zowel de definitie als de implementatie.
  • CS9264: Niet-nullable eigenschap moet een niet-null-waarde bevatten bij het afsluiten van de constructor. Overweeg om de 'vereiste' modifier toe te voegen of de eigenschap als nullable te declareren of kenmerken toe[field: MaybeNull, AllowNull] te voegen.*
  • CS9266: De ene toegangsfunctie van de eigenschap moet 'field' gebruiken omdat de andere accessor deze gebruikt.

Belangrijk

Het field trefwoord is een preview-functie in C# 13. U moet .NET 9 gebruiken en het <LangVersion> element preview instellen op in uw projectbestand om het field contextuele trefwoord te kunnen gebruiken.

Wees voorzichtig met het gebruik van de trefwoordfunctie in een klasse met een veld met de field naam field. Het nieuwe field trefwoord schaduwt een veld met de naam field in het bereik van een eigenschapstoegangsor. U kunt de naam van de field variabele wijzigen of het @ token gebruiken om naar de field id te verwijzen.@field Meer informatie vindt u door de functiespecificatie voor het field trefwoord te lezen.

Vanaf C# 13 kunt u met de preview-functie, field ondersteunde eigenschappen, toegang krijgen tot het gesynthetiseerde back-upveld van de compiler voor een eigenschap. CS9258 geeft aan dat u een variabele met de naam fieldhebt, die kan worden verborgen door het contextuele trefwoord field.

CS9263 geeft aan dat uw declaratie een implementatie bevat. Deze implementatie heeft mogelijk toegang tot het gesynthetiseerde backingveld van de compiler voor die eigenschap. CS9264 geeft aan dat het gebruik van field ervan uitgaat van een niet-nullable backing-veld terwijl de eigenschapsdeclaratie nullable is. De compiler gaat ervan uit dat zowel het backing-veld als de eigenschap dezelfde null-waarde hebben. U moet het [field:MaybeNull, AllowNull] kenmerk toevoegen aan de eigenschapsdeclaratie om aan te geven dat de field waarde als null-waarde moet worden beschouwd. CS9266 geeft aan dat een van een eigenschapstoegangsors het field trefwoord gebruikt, maar de andere gebruikt een hand-gedeclareerd backingveld. De waarschuwing geeft aan dat u dit per ongeluk hebt gedaan.