Fouten en waarschuwingen voor lokale bestandstypen oplossen

De C#-compiler genereert fouten en waarschuwingen wanneer u bestands-lokale typen misbruikt. Lokale bestandstypen zijn alleen zichtbaar in het bestand waarin u ze declareert. Deze diagnostische hulpmiddelen helpen u om de regels voor het declareren en gebruiken van bestand-lokale typen te volgen.

  • CS9051: Bestand-lokaal type kan niet worden gebruikt in een handtekening van een lid in een niet-bestand-lokaal type.
  • CS9052: Bestand-lokaal type kan geen toegankelijkheidsmodificaties gebruiken.
  • CS9053: Bestand-lokaal type kan niet worden gebruikt als basistype van niet-bestand-lokaal type.
  • CS9054: Bestand-lokaal type moet worden gedefinieerd in een type op het hoogste niveau; het is een genest type.
  • CS9055: Bestand-lokaal type kan niet worden gebruikt in een 'global using static'-instructie.
  • CS9056: Typen en aliassen kunnen de naam 'bestand' niet krijgen.
  • CS9068: Het lokale bestandstype moet worden gedeclareerd in een bestand met een uniek pad. Het pad wordt gebruikt in meerdere bestanden.
  • CS9069: Bestand-lokaal type kan niet worden gebruikt omdat het bestandspad niet kan worden geconverteerd naar de equivalente UTF-8 byteweergave.
  • CS9071: De naamruimte bevat al een definitie voor het type in dit bestand.

Zichtbaarheidsbeperkingen

  • CS9051: Bestand-lokaal type kan niet worden gebruikt in een signatuur van een lid in een type dat niet bestand-lokaal is.
  • CS9052: Bestand-lokaal type kan geen toegankelijkheidsmodificatoren gebruiken.
  • CS9053: Bestand-lokaal type kan niet worden gebruikt als basistype van niet-bestand-lokaal type.
  • CS9055: Bestand-lokaal type kan niet worden gebruikt in een 'global using static'-instructie.

Een bestand-lokaal type is alleen zichtbaar in het bestand dat de declaratie bevat. De compiler dwingt beperkingen af om te voorkomen dat bestands-lokale typen 'lekken' buiten het beoogde bereik:

  • Een bestand-lokaal type kan niet worden weergegeven in de handtekening (parameters, retourtype of typebeperkingen) van een lid dat is gedeclareerd in een niet-bestand-lokaal type (CS9051). Deze beperking zorgt ervoor dat code in andere bestanden niet afhankelijk is van typen waartoe deze geen toegang heeft.
  • Bestand-lokale typen kunnen geen expliciete toegankelijkheidsmodifiers hebben, zoals public, internal, of private (CS9052). De file wijzigingsfunctie definieert al het zichtbaarheidsbereik van het type, waardoor andere toegangsaanpassingen betekenisloos zijn.
  • Een niet-bestand-lokaal type kan niet overnemen van een bestand-lokaal type (CS9053). Als een afgeleid type buiten het bestand zichtbaar is, moet het basistype ook zichtbaar zijn. Een niet-bestand-lokaal type kan echter een lokale interface voor bestanden implementeren.
  • Een bestand-lokaal type kan niet worden gebruikt in een global using static richtlijn (CS9055). Globale gebruiksgegevens zijn van toepassing op alle bestanden in de compilatie, maar bestandstypen zijn alleen zichtbaar in hun declaratiebestand.

Als u deze fouten wilt oplossen, verwijdert u de file modifier van het type om het toegankelijk te maken buiten het bestand, of wijzigt u de gebruikscode om te voorkomen dat het bestandslokale type wordt blootgesteld.

Declaratieregels

  • CS9054: Bestand-lokaal type moet worden gedefinieerd in een type op het hoogste niveau; het is een genest type.
  • CS9056: Typen en aliassen kunnen de naam 'bestand' niet krijgen.
  • CS9071: De naamruimte bevat al een definitie voor het type in dit bestand.

De compiler dwingt regels af over hoe bestand-lokale typen worden gedeclareerd.

  • Lokale bestandstypen moeten worden gedeclareerd op het hoogste niveau van een bestand, niet genest binnen een ander type (CS9054). U kunt deze fout oplossen door de typedeclaratie buiten elk type te verplaatsen of de file wijzigingsfunctie te verwijderen.
  • Typen en typealiassen kunnen niet worden genoemd file omdat het nu een contextueel trefwoord (CS9056) is. Als u deze fout wilt oplossen, hernoemt u het type of gebruikt u @file om de identificator te escapen.
  • Een bestand kan niet meerdere bestandstypen met dezelfde naam in dezelfde naamruimte (CS9071) declareren. Een type dat lokaal is voor het bestand moet een unieke naam hebben binnen het bereik van zijn naamruimte in dat bestand. Als u deze fout wilt oplossen, wijzigt u de naam van een van de conflicterende typen.

Vereisten voor bestandspad

  • CS9068: Het lokale bestandstype moet worden gedeclareerd in een bestand met een uniek pad. Het pad wordt gebruikt in meerdere bestanden.
  • CS9069: Bestand-lokaal type kan niet worden gebruikt omdat het bestandspad niet kan worden geconverteerd naar de equivalente UTF-8 byteweergave.

De compiler gebruikt het bestandspad om unieke interne namen te genereren voor bestands-lokale typen. Met dit naamgevingsschema kunnen meerdere bestanden bestandstypen declareren met dezelfde naam zonder conflict:

  • Elk bestand met bestandstypen moet een uniek pad hebben binnen de compilatie (CS9068). Deze fout treedt meestal op bij brongeneratoren die meerdere bestanden produceren met hetzelfde pad. U kunt deze fout oplossen door ervoor te zorgen dat elk gegenereerd bestand een uniek pad heeft.
  • Het bestandspad moet worden omgezet in UTF-8-codering (CS9069). Deze fout treedt op wanneer het bestandspad tekens bevat die niet kunnen worden weergegeven in UTF-8. Als u deze fout wilt oplossen, wijzigt u de naam van het bestand of de map om tekens te gebruiken die geldig zijn in UTF-8.

Deze fouten zijn meestal van invloed op auteurs van brongeneratoren. Zie bestands-lokale typen voor meer informatie over het gebruik van bestandstypen in brongeneratoren.