CA1812: A nem telepített belső osztályok elkerülése
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1812 |
Cím | Kerülje a nem telepített belső osztályokat |
Kategória | Teljesítmény |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
A belső (szerelvényszintű) típus soha nem lesz példányosítva.
Szabály leírása
Ez a szabály megpróbálja megkeresni a típus egyik konstruktorát, és szabálysértést jelez, ha nem található hívás.
A szabály nem vizsgálja a következő típusokat:
- Értéktípusok
- Absztrakt típusok
- Enumerálások
- Delegáltak
- Fordító által kibocsátott tömbtípusok
- Azok a típusok, amelyek nem hozhatók létre, és amelyek csak metódusokat határoznak meg
static
.
Ha az elemzett szerelvényre vonatkozikSystem.Runtime.CompilerServices.InternalsVisibleToAttribute, ez a szabály alapértelmezés szerint nem jelöli meg a (Friend
Visual Basicben) megjelölt internal
típusokat, mivel egy ismerős szerelvény használhatja a mezőt. A szerelvény elemzéséhez lásd : Kód konfigurálása elemzéshez.
Szabálysértések kijavítása
A szabály megsértésének kijavításához távolítsa el az azt használó típust, vagy adjon hozzá kódot. Ha a típus csak static
metódusokat tartalmaz, adja hozzá a static
módosítót a típushoz, hogy a fordító ne bocsátson ki alapértelmezett nyilvánospéldány-konstruktort.
Mikor kell letiltani a figyelmeztetéseket?
A szabály figyelmeztetésének mellőzése biztonságos. Javasoljuk, hogy a következő helyzetekben tiltsa le ezt a figyelmeztetést:
Az osztály későn kötött tükröződési módszerekkel jön létre, például System.Activator.CreateInstance.
Az osztály a függőséginjektálási minta részeként regisztrálva van a vezérlő (IoC) tároló inverziójában.
Az osztályt a futtatókörnyezet vagy a ASP.NET automatikusan hozza létre. Néhány példa az automatikusan létrehozott osztályokra, amelyek implementálják vagy System.Web.IHttpHandler.System.Configuration.IConfigurationSectionHandler
Az osztály típusparaméterként használatos egy osztálydefinícióban, és korlátozással
new
rendelkezik. A CA1812 szabály a következő példát jelöli meg: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();
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA1812
// The code that's violating the rule is on this line.
#pragma warning restore CA1812
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA1812.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kód konfigurálása elemzéshez
A következő beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.
Ezt a beállítást konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában (Teljesítmény) érvényes összes szabályra. További információ: Kódminőségi szabály konfigurációs beállításai.
InternalsVisibleTo attribútum figyelmen kívül hagyása
Ez a szabály alapértelmezés szerint le van tiltva, ha az elemzett szerelvény a belső szimbólumok megjelenítésére használja InternalsVisibleToAttribute . Ha meg szeretné adni, hogy a szabály akkor is fusson, ha a szerelvény meg van jelölve InternalsVisibleToAttribute, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.ignore_internalsvisibleto = true
Ez a beállítás a .NET 8-tól érhető el.
Kapcsolódó szabályok
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: