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
,extern
ofpartial
- CS0750: Een gedeeltelijk lid kan de wijzigingsfunctie '
abstract
' niet hebben. - CS0751: Een gedeeltelijk lid moet worden gedeclareerd in een gedeeltelijk
class
of gedeeltelijkstruct
- 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 zijnstatic
. - CS0764: Beide gedeeltelijke methodedeclaraties moeten zijn
unsafe
of beide mogen niet zijnunsafe
- 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
,override
ensealed
new
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 het
field
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
- 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
- CS8863: Slechts één gedeeltelijke typedeclaratie kan een lijst met parameters hebben
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
ofstruct
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 class
aan , record
of struct
interface
. 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
, ,struct
record struct
record class
, , of ).readonly struct
readonly 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 gedeeltelijkstruct
- CS0754: Een gedeeltelijk lid kan een interfacemethode niet expliciet implementeren.
- CS0763: Beide gedeeltelijke methodedeclaraties moeten of
static
geen van beide zijnstatic
. - CS0764: Beide gedeeltelijke methodedeclaraties moeten zijn
unsafe
of beide mogen niet zijnunsafe
- 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
,override
ensealed
new
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
,extern
ofpartial
- 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 sealed
new
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 het
field
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 field
hebt, 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.