Was ist Option Strict On?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von a.b_om.

    Ich kann durchaus verstehen, wenn Seiten wie die Offizielle Dokumentation fast noch mehr Fragen stellen, als sie beantworten,
    aber hier wird es z.B. relativ einfach erklärt, und ist über die Suche leicht auffindbar.

    Um es in meinen Worten nochmal auszudrücken:
    Option Strict verhindert, dass du fälschlicherweise einer Variable vom Typ x einen Wert vom Typ y zuweist.
    Mit Option Strict On kannst du also nicht einfach sowas machen:

    VB.NET-Quellcode

    1. Dim meinString As String
    2. Dim meinInt As Integer = 4
    3. meinString = meinInt

    Das mag zwar auf den ersten Blick unproblematisch erscheinen, es wird ja nur ein Int in einen String umgewandelt, jedoch kann man sich auch sehr schnell daran gewöhnen und weiß dann nicht, wenn es kracht, warum man da nun plötzlich nen Button in ner Variablen hat, wo man doch eigentlich nen FileStream haben wollte.
    Ich finde es erschreckend wie viel hier gespamt wird wenn jemand eine ziemlich wichtige Frage stellt. Zumal ein Hinweis dazu fast in jedem 2. Thread auftaucht. Manchen Leuten kann man es nicht recht machen, besonders Google Spezialisten.
    Der Beitrag von EaranMaleasi bringt es auf den Punkt. Typsicherheit wird erzwungen.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Option Strict ist z.B. auch beim Thema »spätes Binden« relevant. Wenn Du eine Variable vom Typ Object hast, kannst Du der alles mögliche »anhängen«, solange Du Option Strict Off hast:

    VB.NET-Quellcode

    1. Private Sub WhatWillHappenHere(sender As Object, e As EventArgs) Handles Button1.Click, TextBox1.TextChanged
    2. sender.PerformClick
    3. End Sub

    Es wird dann eben zur Designzeit nicht geprüft, ob sender etwas mit PerformClick anfangen kann. Das stellt sich erst zur Laufzeit heraus. Wenn es da Probleme gibt, gibt es einen Laufzeitfehler, was meistens heißt: Programmabsturz. Sobald aber Option Strict On geschaltet wird, akzeptiert der Compiler kein spätes Binden mehr. Der Programmierer ist also verpflichtet aus der Object-Variable etwas konkretes zu machen, z.B. durch einen Cast: DirectCast(sender, TextBox). Dann wird dem Compiler klar: »Ah, hier hab ich jetzt also nicht irgendwas, sondern ne TextBox. Mal sehen, ob solch eine TextBox was mit PerformClick anfangen kann. Nö, kann es nicht. Also: Fehlermeldung«. Und zwar zur Designzeit. Demenstprechend kann nicht mehr kompiliert werden und der Programmierer wird rechtzeitig darauf hingewiesen, dass er Mist gebaut hat.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Vielen Dank, ich habe es jetzt verstanden.
    Option Strict ON
    Dim strVariable As String = StringVariable ist gültig
    Dim strVariable As String = ObjectVariable ist nicht gültig
    ___________________________________________________________
    Option Strict OFF
    Dim strVariable As String = StringVariable ist gültig
    Dim strVariable As String = ObjectVariable ist auch gültig