Freigeben über


CA1812: Nicht instanziierte interne Klassen vermeiden

TypeName

AvoidUninstantiatedInternalClasses

CheckId

CA1812

Kategorie

Microsoft.Performance

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Eine Instanz eines Typs auf Assemblyebene wird nicht durch Code in der Assembly erstellt.

Regelbeschreibung

Diese Regel versucht, einen Aufruf eines der Konstruktoren des Typs zu finden, und meldet einen Verstoß, wenn kein Aufruf gefunden wird.

Die folgenden Typen werden durch diese Regel nicht überprüft:

  • Werttypen

  • Abstrakte Typen

  • Enumerationen

  • Delegaten

  • Von einem Compiler ausgegebene Arraytypen

  • Typen, die nicht instanziiert werden können und nur static Methoden (Shared in Visual Basic) definieren.

Wenn Sie System.Runtime.CompilerServices.InternalsVisibleToAttribute auf die zu analysierende Assembly anwenden, wird diese Regel nicht für Konstruktoren ausgelöst, die mit internal markiert sind, da nicht zu erkennen ist, ob ein Feld von einer anderen friend-Assembly verwendet wird.

Obwohl es keine Möglichkeit gibt, diese Einschränkung der Visual Studio-Codeanalyse zu umgehen, wird der externe eigenständige FxCop-Prozess für interne Konstruktoren ausgelöst, wenn die einzelnen friend-Assemblys in der Analyse vorhanden sind.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, entfernen Sie den Typ, oder fügen Sie den Code hinzu, in dem der Typ verwendet wird. Wenn der Typ nur statische Methoden enthält, fügen Sie dem Typ eines der folgenden Elemente hinzu, um den Compiler daran zu hindern, einen Standardkonstruktor für eine öffentliche Instanz auszugeben:

  • Einen privaten Konstruktor für Typen, die auf .NET Framework, Version 1.0 und 1.1, abzielen.

  • Der static-Modifizierer (Shared in Visual Basic) für Typen, die auf .NET Framework 2.0 abzielen.

Wann sollten Warnungen unterdrückt werden?

Warnungen dieser Regel können gefahrlos unterdrückt werden. Es wird empfohlen, diese Warnung in den folgenden Situationen zu unterdrücken:

  • Die Klasse wird durch spät gebundene Reflektionsmethoden wie CreateInstance erstellt.

  • Die Klasse wird automatisch von der Runtime oder von ASP.NET erstellt. Zum Beispiel Klassen, die System.Configuration.IConfigurationSectionHandler oder System.Web.IHttpHandler implementieren.

  • Die Klasse wird als generischer Typparameter mit einer neuen Einschränkung übergeben. Im folgenden Beispiel wird z. B. diese Regel ausgelöst:

    internal class MyClass
    {   
        public DoSomething()   
        {
        }
    } 
    public class MyGeneric<T> where T : new()
    {
        public T Create()
        {
            return new T();   
        }
    }
    // [...] 
    MyGeneric<MyClass> mc = new MyGeneric<MyClass>();
    mc.Create();
    

Die Empfehlung für diese Situationen lautete, die Warnung zu unterdrücken.

Verwandte Regeln

CA1811: Nicht aufgerufenen privaten Code vermeiden

CA1801: Nicht verwendete Parameter überprüfen

CA1804: Nicht verwendete lokale Variablen entfernen