Der Typ des optionalen Werts für den optionalen <Parametername>-Parameter ist nicht CLS-kompatibel

Aktualisiert: November 2007

Type of optional value for optional parameter <parametername> is not CLS-compliant

Eine Prozedur ist als <CLSCompliant(True)> markiert, deklariert jedoch einen Optional (Visual Basic)-Parameter mit einem nicht kompatiblen Typ als Standardwert.

Damit eine Prozedur mit der CLS (Common Language Specification) (CLS) kompatibel ist, darf sie nur CLS-kompatible Typen verwenden. Dies gilt für die Parametertypen, den Rückgabetyp und die Typen aller ihrer lokalen Variablen. Dies gilt auch für die Standardwerte optionaler Parameter.

Die folgenden Visual Basic-Datentypen sind nicht CLS-kompatibel:

Wenn Sie das CLSCompliantAttribute-Attribut auf ein Programmierelement anwenden, legen Sie den isCompliant-Parameter des Attributs auf True oder auf False fest, um die Kompatibilität bzw. Nichtkompatibilität anzugeben. Es gibt keinen Standardwert für diesen Parameter, und Sie müssen einen Wert angeben.

Wenn Sie CLSCompliantAttribute auf ein Element nicht anwenden, wird dieses als nicht kompatibel betrachtet.

Standardmäßig ist diese Meldung eine Warnung. Informationen über das Ausblenden von Warnungen bzw. über die Behandlung von Warnungen als Fehler finden Sie unter Konfigurieren von Warnungen in Visual Basic.

Fehler-ID: BC40042

So beheben Sie diesen Fehler

  • Wenn der optionale Parameter als Standardwert diesen speziellen Typ aufweisen muss, entfernen Sie CLSCompliantAttribute. Die Prozedur kann nicht CLS-kompatibel sein.

  • Wenn die Prozedur CLS-kompatibel sein muss, ändern Sie den Typ dieses Standardwerts in den ähnlichsten CLS-kompatiblen Typ. Möglicherweise können Sie z. B. Integer anstelle von UInteger verwenden, wenn Sie den Wertebereich über 2.147.483.647 nicht benötigen. Wenn Sie den erweiterten Bereich benötigen, können Sie UInteger durch Long ersetzen.

  • Wenn Sie Verbindungen mit Automatisierungs- oder COM-Objekten verwenden, beachten Sie, dass einige Typen über andere Datenbreiten als in .NET Framework verfügen. Beispielsweise umfasst int in anderen Umgebungen oft 16 Bits. Wenn Sie ein 16-Bit-Argument von einer solchen Komponente akzeptieren, deklarieren Sie es im verwalteten Visual Basic-Code als Short und nicht als Integer.

Siehe auch

Konzepte

Schreiben von CLS-kompatiblem Code