Option Strict Statement

Beschränkt implizite Datentypkonvertierungen auf erweiternde Konvertierungen, verbietet spätes Binden und verbietet implizite Typisierung, die zu einem Object-Typ führt.

Syntax

Option Strict { On | Off }

Bestandteile

Begriff Definition
On Dies ist optional. Aktiviert Option Strict-Überprüfung.
Off Optional. Deaktiviert Option Strict-Überprüfung.

Bemerkungen

Wenn Option Strict On oder Option Strict in einer Datei angezeigt wird, führen die folgenden Bedingungen zu einem Kompilierungsfehler:

  • Implizite Eingrenzungskonvertierungen

  • Spätes Binden

  • Implizites Typisierung der Ergebnisse in einem Object-Typ

Hinweis

In den Warnkonfigurationen, die Sie auf der Kompilierungsseite im Projekt-Designer (Visual Basic) festlegen können, gibt es drei Einstellungen, die den drei Bedingungen entsprechen, die einen Fehler bei der Kompilierung verursachen. Informationen zur Verwendung dieser Einstellungen finden Sie unter So legen Sie Warnungskonfigurationen in der IDE weiter unten in diesem Thema fest.

Die Option Strict Off-Anweisung deaktiviert die Fehler- und Warnüberprüfung auf alle drei Bedingungen, auch wenn die zugehörigen IDE-Einstellungen angeben, dass diese Fehler oder Warnungen aktiviert werden sollen. Die Option Strict On-Anweisung aktiviert die Fehler- und Warnüberprüfung auf alle drei Bedingungen, auch wenn die zugehörigen IDE-Einstellungen angeben, dass diese Fehler oder Warnungen deaktiviert werden sollen.

Bei Verwendung muss die Option Strict-Anweisung vor allen anderen Codeanweisungen in einer Datei stehen.

Wenn Sie Option Strict auf On festlegen, prüft Visual Basic, ob für alle Programmierelemente Datentypen angegeben sind. Datentypen können explizit angegeben oder mithilfe der lokalen Typ-Ableitung angegeben werden. Die Angabe von Datentypen für alle Programmierelemente wird aus den folgenden Gründen empfohlen:

  • Sie ermöglicht die IntelliSense-Unterstützung für Ihre Variablen und Parameter. Auf diese Weise können Sie deren Eigenschaften und andere Member während der Eingabe von Code anzeigen.

  • Er ermöglicht es dem Compiler, die Typüberprüfung durchzuführen. Die Typüberprüfung hilft Ihnen beim Auffinden von Anweisungen, die zur Laufzeit aufgrund von Typkonvertierungsfehlern fehlschlagen können. Außerdem werden Aufrufe von Methoden für Objekte identifiziert, die diese Methoden nicht unterstützen.

  • Sie beschleunigt die Ausführung von Code. Ein Grund hierfür ist, dass der Visual Basic-Compiler den Object-Typ zuweist, wenn Sie keinen Datentyp für ein Programmierelement angeben. Kompilierter Code muss möglicherweise zwischen Object und anderen Datentypen konvertiert werden, wodurch die Leistung reduziert wird.

Implizite Verengungskonvertierungsfehler

Implizite Eingrenzungskonvertierungsfehler treten auf, wenn eine implizite Datentypkonvertierung vorhanden ist, die eine Eingrenzungskonvertierung ist.

Visual Basic kann viele Datentypen in andere Datentypen konvertieren. Allerdings können Datenverluste auftreten, wenn der Wert von einem Datentyp in einen Datentyp konvertiert wird, der weniger genau ist oder eine kleinere Kapazität aufweist. Wenn eine solche Schmalungskonvertierung fehlschlägt, tritt ein Laufzeitfehler auf. Option Strict stellt die Kompilierungszeitbenachrichtigung über diese schmalen Konvertierungen sicher, damit Sie sie vermeiden können. Weitere Informationen finden Sie unter Implizite und explizite Konvertierungen und Erweiternde und eingrenzende Konvertierungen.

Konvertierungen, die Fehler verursachen können, umfassen implizite Konvertierungen, die in Ausdrücken auftreten. Weitere Informationen finden Sie in den folgenden Themen:

Wenn Sie Zeichenfolgen mithilfe des &-Operators verketten, werden alle Konvertierungen in die Zeichenfolgen als Verbreiterung betrachtet. Daher generieren diese Konvertierungen keinen impliziten Verengungsfehler, auch wenn Option Strict aktiviert ist.

Wenn Sie eine Methode aufrufen, die ein Argument enthält, das einen anderen Datentyp als der entsprechende Parameter aufweist, führt eine schmale Konvertierung zu einem Kompilierungszeitfehler, falls Option Strict aktiviert ist. Sie können den Kompilierungszeitfehler vermeiden, indem Sie eine Erweiterungskonvertierung oder eine explizite Konvertierung verwenden.

Implizite Verengungsfehler werden zur Kompilierungszeit für Konvertierungen aus den Elementen in einer For Each…Next Auflistung in die Loop-Steuerelementvariable unterdrückt. Dies tritt auch dann auf, wenn Option Strict aktiviert ist. Weitere Informationen finden Sie im Abschnitt "Verengung von Konvertierungen" in For Each... Next-Anweisung.

Verspätete Bindungsfehler

Ein Objekt wird spät gebunden, wenn es einer Eigenschaft oder Methode einer Variable zugeordnet wird, für die der Typ Object deklariert wurde. Weitere Informationen finden Sie unter Frühes und spätes Binden.

Implizite Objekttypfehler

Implizite Objekttypfehler treten auf, wenn ein entsprechender Typ nicht für eine deklarierte Variable hergeleitet werden kann, also wir ein Typ von Object hergeleitet. Dies tritt vorwiegend auf, wenn Sie eine Dim-Anweisung verwenden, um eine Variable ohne die Verwendung einer As-Klausel deklarieren und Option Infer deaktiviert ist. Weitere Informationen finden Sie unter Option Infer-Anweisung und der Visual Basic-Sprachspezifikation.

Bei Methodenparametern ist die As Klausel optional, wenn Option Strict deaktiviert ist. Wenn jedoch ein Parameter eine As Klausel verwendet, muss er alle verwenden. Falls Option Strict aktiviert, ist die As Klausel für jede Parameterdefinition erforderlich.

Wenn Sie eine Variable deklarieren, ohne eine As-Klausel zu verwenden und sie auf Nothing festzulegen, hat die Variable den Typ Object. In diesem Fall tritt kein Kompilierungsfehler auf und Option Strict und Option Infer sind aktiviert. Das Beispiel dafür ist Dim something = Nothing.

Standarddatentypen und -werte

Die folgende Tabelle beschreibt die Ergebnisse der verschiedenen Kombinationen der Spezifizierung von Datentyp und Initialisierung in einer Dim-Anweisung.

Datentyp angegeben? Initialisierung angegeben? Beispiel Ergebnis
Nein Nein Dim qty Wenn Option Strict deaktiviert ist (Standard), ist die Variable auf Nothing eingestellt.

Wenn Option Strict aktiviert ist, tritt ein Kompilierzeitfehler auf.
Nein Ja Dim qty = 5 Wenn Option Infer aktiviert ist (Standard), übernimmt die Variable den Datentyp des Initialisierers an. Siehe Lokaler Typrückschluss.

Wenn Option Infer und Option Strict ausgeschaltet sind, nimmt die Variable den Datentyp des Object an.

Wenn Option Infer deaktiviert ist und Option Strict aktiviert ist, tritt ein Kompilierzeitfehler auf.
Ja Nein Dim qty As Integer Die Variable wird auf den Standardwert für den Datentyp initialisiert. Weitere Informationen finden Sie unter Dim-Anweisung.
Ja Ja Dim qty As Integer = 5 Wenn der Datentyp der Initialisierung nicht in den angegebenen Datentyp konvertiert werden kann, tritt ein Fehler während der Kompilierung auf.

Wenn eine Option Strict-Anweisung nicht vorhanden ist

Wenn der Quellcode keine Option Strict-Anweisung enthält , wird die Einstellung Option strict auf der Kompilierungsseite, Project Designer (Visual Basic) verwendet. Die Kompilierungsseite verfügt über Einstellungen, die zusätzliche Kontrolle über die Bedingungen bieten, die einen Fehler generieren.

Wenn Sie den Befehlszeilencompiler verwenden, können Sie die Compileroption -optionstrict verwenden, um eine Einstellung für Option Strictanzugeben.

So legen Sie Option Strict in der IDE fest

Hinweis

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren der IDE.

  1. Wählen Sie im Projektmappen-Explorer ein Projekt aus. Klicken Sie im Menü Projekt auf Eigenschaften.

  2. Legen Sie auf der Registerkarte Kompilieren den Wert im Feld Option Streng fest.

So legen Sie Warnungskonfigurationen in der IDE fest

Wenn Sie die Kompilierungsseite, Project Designer (Visual Basic) anstelle einer Option Strict Anweisung verwenden, haben Sie zusätzliche Kontrolle über die Bedingungen, die Fehler generieren. Der Abschnitt Warnungskonfigurationen auf der Seite Kompilieren verfügt über Einstellungen, die mit den drei Bedingungen übereinstimmen, die einen Kompilierzeitfehler auslösen, wenn Option Strict aktiviert ist. Die drei Einstellungen sind die folgenden:

  • Implizite Konvertierung

  • Späte Bindung; Aufruf könnte zur Laufzeit einen Fehler verursachen

  • Impliziter Typ; Objekt wird angenommen

Wenn Sie Option Strict auf Ein festlegen, werden alle drei Warnungskonfigurationseinstellungen auf Fehler festgelegt. Wenn Sie Option Strict auf Aus festlegen werden alle drei Einstellungen auf Keine festgelegt.

Sie können individuell jede Warnungskonfigurationseinstellung auf Keine, Warnung oder Fehler festlegen. Wenn alle drei Warnungskonfigurationseinstellungen auf Fehler festgelegt sind, erscheint On im Option strict-Feld. Wenn alle drei Einstellungen auf Keine festgelegt sind, erscheint Off im Feld. Für jede andere Kombination dieser Einstellungen erscheint (benutzerdefiniert).

So legen Sie die Option Strict-Standardeinstellung für neue Projekte fest

Wenn Sie ein Projekt erstellen, wird die Option Strict-Einstellung in der Seite Kompilieren auf den Wert der Option Strict-Einstellung im Dialogfeld Optionen festgelegt.

Um Option Strict in diesem Dialogfeld festzulegen, klicken Sie im Menü Tools auf Optionen. Erweitern Sie im Dialogfeld OptionenProjekte und Lösungen, und klicken Sie dann auf VB Defaults. Die ursprüngliche Standardeinstellung in VB Defaults ist Off.

So legen Sie Option Strict in der Befehlszeile fest

Fügen Sie die Compileroption -optionstrict in den vbc-Befehl ein.

Beispiel 1

Die folgenden Beispiele veranschaulichen Kompilierungszeitfehler, die durch implizite Typkonvertierungen verursacht werden, die Konvertierungen einschränken. Diese Fehlerkategorie entspricht der impliziten Konvertierungsbedingung auf der Kompilierungsseite.

' If Option Strict is on, this implicit narrowing
' conversion causes a compile-time error.
' The commented statements below use explicit
' conversions to avoid a compile-time error.
Dim cyclists As Long = 5
Dim bicycles As Integer = cyclists
'Dim bicycles As Integer = CType(cyclists, Integer)
'Dim bicycles As Integer = CInt(cyclists)
'Dim bicycles As Integer = Convert.ToInt32(cyclists)


' If Option Strict is on, this implicit narrowing
' conversion causes a compile-time error.
' The commented statements below use explicit
' conversions to avoid a compile-time error.
Dim charVal As Char = "a"
'Dim charVal As Char = "a"c
'Dim charVal As Char = CType("a", Char)


' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the string is implicitly converted
' to a Double, and then is added to the other number.
Dim myAge As Integer = "34" + 6


' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the floating-point number
' is implicitly converted to a Long.
Dim num = 123.45 \ 10

Beispiel 2

Im folgenden Beispiel wird ein Kompilierungszeitfehler veranschaulicht, der durch verspätete Bindung verursacht wird. Diese Fehlerkategorie entspricht der verspäteten Bindung. Der Aufruf kann zur Laufzeitbedingung auf der Kompilierungsseitefehlschlagen.

' If Option Strict is on, this late binding
' causes a compile-time error. If Option Strict
' is off, the late binding instead causes a
' run-time error.
Dim punchCard As New Object
punchCard.Column = 5

Beispiel 3

Die folgenden Beispiele veranschaulichen Fehler, die durch Variablen verursacht werden, die mit einem impliziten Typ von Object. Diese Fehlerkategorie entspricht dem impliziten Typ; Objekt wird auf der Kompilierungsseite angenommen.

' If Option Strict is on and Option Infer is off,
' this Dim statement without an As clause 
' causes a compile-time error.
Dim cardReaders = 5

' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the variable is set to Nothing.
Dim dryWall
' If Option Strict is on, this parameter without an
' As clause causes a compile-time error.
Private Sub DetectIntergalacticRange(ByVal photonAttenuation)

End Sub

Siehe auch