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()
{
}
}
}