Share via


Abstrakte Datentypen sollten keine Konstruktoren aufweisen

Aktualisiert: November 2007

     TypeName

AbstractTypesShouldNotHaveConstructors

CheckId

CA1012

Kategorie

Microsoft.Design

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Ein öffentlicher Typ ist abstrakt und verfügt über einen öffentlichen Konstruktor.

Regelbeschreibung

Konstruktoren von abstrakten Datentypen können nur von abgeleiteten Typen aufgerufen werden. Da öffentliche Konstruktoren Instanzen eines Typs erstellen und Sie keine Instanzen eines abstrakten Datentyps erstellen können, ist ein abstrakter Datentyp mit einem öffentlichen Konstruktor fehlerhaft konzipiert.

Behandlung von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, machen Sie entweder den Konstruktor zu einem geschützten Konstruktor, oder deklarieren Sie den Typ nicht als abstrakten Datentyp.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel. Der abstrakte Typ verfügt über einen öffentlichen Konstruktor.

Beispiel

Das folgende Beispiel enthält einen abstrakten Typ, der gegen diese Regel verstößt.

Imports System     

Namespace Samples

    ' Violates this rule      
    Public MustInherit Class Book 

        Public Sub New()          
        End Sub 

    End Class 

End Namespace 
using System;

namespace Samples  
{   
    // Violates this rule      
    public abstract class Book      
    {          
        public Book()          
        {          
        }      
    } 
}

Im folgenden Beispiel wird der vorherige Verstoß korrigiert, indem der Konstruktorzugriff von public in protected geändert wird.

Imports System     

Namespace Samples

    ' Violates this rule      
    Public MustInherit Class Book 

        Protected Sub New()          
        End Sub 

    End Class 

End Namespace 
using System;

namespace Samples  
{   
    // Violates this rule      
    public abstract class Book      
    {          
        protected Book()          
        {          
        }      
    } 
}