Megosztás a következőn keresztül:


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 (FriendVisual 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 newrendelkezik. 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.