CA1812: Vermijd niet-geïnstantieerde interne klassen
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1812 |
Titel | Vermijd niet-geïnstantieerde interne klassen |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Een intern type (assemblyniveau) wordt nooit geïnstantieerd.
Beschrijving van regel
Deze regel probeert een aanroep naar een van de constructors van het type te vinden en meldt een schending als er geen aanroep wordt gevonden.
De volgende typen worden niet onderzocht door deze regel:
- Waardetypen
- Abstracte typen
- Opsommingen
- Gedelegeerden
- Door compiler verzonden matrixtypen
- Typen die niet kunnen worden geïnstantieerd en die alleen methoden definiëren
static
.
Als u van toepassing bent op System.Runtime.CompilerServices.InternalsVisibleToAttribute de assembly die wordt geanalyseerd, worden met deze regel standaard geen markeringstypen gemarkeerd als internal
(Friend
in Visual Basic), omdat een veld mogelijk wordt gebruikt door een vriendassembly. Als u de assembly toch wilt analyseren, raadpleegt u Code configureren om te analyseren.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, verwijdert u het type of voegt u code toe die deze gebruikt. Als het type alleen static
methoden bevat, voegt u de static
wijzigingsfunctie toe aan het type om te voorkomen dat de compiler een standaardconstructor voor openbare exemplaren verzendt.
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken. We raden u aan deze waarschuwing in de volgende situaties te onderdrukken:
De klasse wordt gemaakt via late-gebonden reflectiemethoden zoals System.Activator.CreateInstance.
De klasse wordt geregistreerd in een ioC-container (Inversion of Control) als onderdeel van het patroon voor afhankelijkheidsinjectie .
De klasse wordt automatisch gemaakt door de runtime of ASP.NET. Enkele voorbeelden van automatisch gemaakte klassen zijn klassen die implementeren System.Configuration.IConfigurationSectionHandler of System.Web.IHttpHandler.
De klasse wordt gebruikt als een typeparameter in een klassedefinitie en heeft een
new
beperking. Het volgende voorbeeld wordt gemarkeerd met regel CA1812:internal class MyClass { public void DoSomething() { } } public class MyGeneric<T> where T : new() { public T Create() { return new T(); } } MyGeneric<MyClass> mc = new MyGeneric<MyClass>(); mc.Create();
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1812
// The code that's violating the rule is on this line.
#pragma warning restore CA1812
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1812.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Code configureren om te analyseren
Gebruik de volgende optie om te configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd.
U kunt deze optie configureren voor alleen deze regel, voor alle regels waarop deze van toepassing is, of voor alle regels in deze categorie (prestaties) waarop deze van toepassing is. Zie de configuratieopties voor de codekwaliteitsregel voor meer informatie.
Kenmerk InternalsVisibleTo negeren
Deze regel is standaard uitgeschakeld als de assembly die wordt geanalyseerd, wordt gebruikt InternalsVisibleToAttribute om de interne symbolen beschikbaar te maken. Als u wilt opgeven dat de regel moet worden uitgevoerd, zelfs als de assembly is gemarkeerd met InternalsVisibleToAttribute, voegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project:
dotnet_code_quality.CAXXXX.ignore_internalsvisibleto = true
Deze optie is beschikbaar vanaf .NET 8.