Freigeben über


Nicht instanziierte interne Klassen vermeiden

Aktualisiert: November 2007

     TypeName

AvoidUninstantiatedInternalClasses

CheckId

CA1812

Kategorie

Microsoft.Performance

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Eine Instanz eines Typs auf Assemblyebene wird durch Code nicht innerhalb 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 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.

Behandlung 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.

  • Den static-Modifizierer 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 Laufzeit oder ASP.NET erstellt. Beispielsweise Klassen, durch die System.Configuration.IConfigurationSectionHandler oder System.Web.IHttpHandler implementiert wird.

  • 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

Nicht aufgerufenen privaten Code vermeiden

Nicht verwendete Parameter überprüfen

Nicht verwendete lokale Variablen entfernen