Delen via


Strikte instructie van optie

Hiermee worden impliciete conversies van gegevenstypen beperkt tot alleen verbreedingsconversies, wordt late binding niet toegeslagen en wordt impliciet typen niet toegeslagen, wat resulteert in een Object type.

Syntaxis

Option Strict { On | Off }

generator

Term Definitie
On Optioneel. Hiermee schakelt u Option Strict de controle in.
Off Optioneel. Schakelt de controle uit Option Strict .

Opmerkingen

Wanneer Option Strict On of Option Strict wordt weergegeven in een bestand, veroorzaken de volgende voorwaarden een compilatietijdfout:

  • Impliciete vermalingsconversies

  • Late binding

  • Impliciet typen dat resulteert in een Object type

Notitie

In de waarschuwingsconfiguraties die u kunt instellen op de compileerpagina, Projectontwerper (Visual Basic), zijn er drie instellingen die overeenkomen met de drie voorwaarden die een compilatiefout veroorzaken. Zie Waarschuwingsconfiguraties instellen in de IDE verderop in dit onderwerp voor meer informatie over het gebruik van deze instellingen.

De Option Strict Off instructie schakelt fout- en waarschuwingscontrole voor alle drie de voorwaarden uit, zelfs als de bijbehorende IDE-instellingen opgeven dat deze fouten of waarschuwingen moeten worden ingeschakeld. De Option Strict On instructie schakelt fout- en waarschuwingscontrole in op alle drie de voorwaarden, zelfs als de bijbehorende IDE-instellingen opgeven dat deze fouten of waarschuwingen moeten worden uitgeschakeld.

Indien gebruikt, moet de Option Strict instructie worden weergegeven vóór andere code-instructies in een bestand.

Wanneer u dit OninsteltOption Strict, controleert Visual Basic of gegevenstypen zijn opgegeven voor alle programmeerelementen. Gegevenstypen kunnen expliciet worden opgegeven of opgegeven met behulp van lokale typedeductie. Het opgeven van gegevenstypen voor al uw programmeerelementen wordt aanbevolen om de volgende redenen:

  • Hiermee wordt IntelliSense-ondersteuning ingeschakeld voor uw variabelen en parameters. Hierdoor kunt u hun eigenschappen en andere leden zien terwijl u code typt.

  • Hiermee kan de compiler typecontrole uitvoeren. Met typecontrole kunt u instructies vinden die tijdens de uitvoering kunnen mislukken vanwege typeconversiefouten. Het identificeert ook aanroepen naar methoden voor objecten die deze methoden niet ondersteunen.

  • Hiermee wordt de uitvoering van code versneld. Een van de redenen hiervoor is dat als u geen gegevenstype voor een programmeerelement opgeeft, de Visual Basic-compiler het Object type toewijst. Gecompileerde code moet mogelijk heen en weer worden geconverteerd tussen Object en andere gegevenstypen, wat de prestaties vermindert.

Impliciete vermalingsconversiefouten

Impliciete vermalingsconversiefouten treden op wanneer er een impliciete conversie van het gegevenstype is die een smalle conversie is.

Visual Basic kan veel gegevenstypen converteren naar andere gegevenstypen. Gegevensverlies kan optreden wanneer de waarde van één gegevenstype wordt geconverteerd naar een gegevenstype met minder precisie of een kleinere capaciteit. Er treedt een runtimefout op als een dergelijke vermalingsconversie mislukt. Option Strict zorgt voor een compilatietijdmelding van deze vermalende conversies, zodat u ze kunt vermijden. Zie Impliciete en expliciete conversies en widening- en narrowing-conversies voor meer informatie.

Conversies die fouten kunnen veroorzaken, zijn impliciete conversies die voorkomen in expressies. Zie de volgende onderwerpen voor meer informatie:

Wanneer u tekenreeksen samenvoegt met behulp van de &Operator, worden alle conversies naar de tekenreeksen beschouwd als breder. Deze conversies genereren dus geen impliciete vermalingsfout, zelfs niet als Option Strict deze is ingeschakeld.

Wanneer u een methode aanroept die een argument heeft dat een ander gegevenstype heeft dan de bijbehorende parameter, veroorzaakt een vermalingsconversie een compilatiefout als Option Strict deze is ingeschakeld. U kunt de compilatiefout voorkomen met behulp van een brede conversie of een expliciete conversie.

Impliciete vermalingsconversiefouten worden tijdens het compileren onderdrukt voor conversies van de elementen in een For Each…Next verzameling naar de lusbesturingselementvariabele. Dit gebeurt zelfs als Option Strict deze is ingeschakeld. Zie de sectie 'Narrowing Conversions' in For Each voor meer informatie. Volgende instructie.

Late bindingsfouten

Een object is te laat gebonden wanneer het wordt toegewezen aan een eigenschap of methode van een variabele die als type Objectwordt gedeclareerd. Zie Early en Late Binding voor meer informatie.

Impliciete objecttypefouten

Impliciete objecttypefouten treden op wanneer een geschikt type niet kan worden afgeleid voor een gedeclareerde variabele, dus een type Object wordt afgeleid. Dit gebeurt voornamelijk wanneer u een Dim instructie gebruikt om een variabele te declareren zonder een As component te gebruiken en Option Infer is uitgeschakeld. Zie Option Infer Statement en de Visual Basic Language Specification voor meer informatie.

Voor methodeparameters is de As component optioneel als Option Strict deze is uitgeschakeld. Als een parameter echter gebruikmaakt van een As component, moeten ze deze allemaal gebruiken. Als Option Strict dit is ingeschakeld, is de As component vereist voor elke parameterdefinitie.

Als u een variabele declareert zonder een As component te gebruiken en deze instelt Nothingop , heeft de variabele een type Object. Er treedt geen compilatietijdfout op in dit geval wanneer Option Strict deze is ingeschakeld en Option Infer is ingeschakeld. Een voorbeeld hiervan is Dim something = Nothing.

Standaardgegevenstypen en -waarden

In de volgende tabel worden de resultaten beschreven van verschillende combinaties van het opgeven van het gegevenstype en de initialisatiefunctie in een Dim-instructie.

Opgegeven gegevenstype? Initialisatiefunctie opgegeven? Opmerking Resultaat
Nee Nr. Dim qty Als Option Strict deze optie is uitgeschakeld (de standaardinstelling), wordt de variabele ingesteld op Nothing.

Als Option Strict dit is ingeschakeld, treedt er een compilatiefout op.
Nr. Ja Dim qty = 5 Als Option Infer deze is ingeschakeld (de standaardinstelling), neemt de variabele het gegevenstype van de initialisatiefunctie. Zie deductie van het lokale type.

Als Option Infer de variabele is uitgeschakeld en Option Strict is uitgeschakeld, wordt het gegevenstype van de variabele gebruikt Object.

Als Option Infer deze is uitgeschakeld en Option Strict is ingeschakeld, treedt er een compilatietijdfout op.
Ja Nr. Dim qty As Integer De variabele wordt geïnitialiseerd tot de standaardwaarde voor het gegevenstype. Zie Dim-instructie voor meer informatie.
Ja Ja Dim qty As Integer = 5 Als het gegevenstype van de initialisatiefunctie niet kan worden omgezet in het opgegeven gegevenstype, treedt er een compilatiefout op.

Wanneer er geen strikte instructie van de optie aanwezig is

Als de broncode geen instructie bevat Option Strict , wordt de strikte instelling Option op de compileerpagina gebruikt. Project Designer (Visual Basic) wordt gebruikt. De pagina Compileren bevat instellingen die extra controle bieden over de voorwaarden die een fout genereren.

Als u de opdrachtregelcompilator gebruikt, kunt u de optie -optionstrict compiler gebruiken om een instelling voor Option Strictop te geven.

Optie strikt instellen in de IDE

Notitie

Mogelijk worden op uw computer verschillende namen of locaties weergegeven voor sommige elementen van de Visual Studio-gebruikersinterface in de volgende instructies. De Visual Studio-editie die u hebt en de instellingen die u gebruikt, bepalen deze elementen. Zie Personalizing the IDE (Personalizing the IDE) voor meer informatie.

  1. Selecteer een project in Solution Explorer. Klik in het menu Project op Eigenschappen.

  2. Stel op het tabblad Compileren de waarde in het vak Optie strikt in.

Waarschuwingsconfiguraties instellen in de IDE

Wanneer u de compileerpagina gebruikt, hebt u projectontwerper (Visual Basic) in plaats van een Option Strict instructie extra controle over de voorwaarden die fouten genereren. De sectie Waarschuwingsconfiguraties van de pagina Compileren heeft instellingen die overeenkomen met de drie voorwaarden die een compilatiefout veroorzaken wanneer Option Strict deze is ingeschakeld. Dit zijn de volgende instellingen:

  • Impliciete conversie

  • Late binding; aanroep kan mislukken tijdens runtime

  • Impliciet type; object wordt ervan uitgegaan

Wanneer u Optie striktop Aan instelt, worden alle drie deze waarschuwingsconfiguratie-instellingen ingesteld op Fout. Wanneer u Optie strikt op Uit instelt, worden alle drie de instellingen ingesteld op Geen.

U kunt elke instelling voor de waarschuwingsconfiguratie afzonderlijk wijzigen in Geen, Waarschuwing of Fout. Als alle drie de configuratie-instellingen voor waarschuwingen zijn ingesteld op Fout, On wordt dit weergegeven in het Option strict vak. Als alle drie zijn ingesteld op Geen, Off wordt in dit vak weergegeven. Voor elke andere combinatie van deze instellingen wordt (aangepast) weergegeven.

De standaardinstelling Option Strict instellen voor nieuwe projecten

Wanneer u een project maakt, wordt de instelling Optie strikt op het tabblad Compileren ingesteld op de instelling Optie strikt in het dialoogvenster Opties .

Als u dit dialoogvenster wilt instellen Option Strict , klikt u in het menu Extra op Opties. Vouw projecten en oplossingen uit in het dialoogvenster Opties en klik vervolgens op VB-standaardwaarden. De eerste standaardinstelling in VB Defaults is Off.

Optie strikt instellen op de opdrachtregel

Neem de optie -optionstrict compiler op in de vbc-opdracht .

Voorbeeld 1

In de volgende voorbeelden worden compilatiefouten gedemonstreerd die worden veroorzaakt door impliciete typeconversies die conversies beperken. Deze categorie fouten komt overeen met de impliciete conversievoorwaarde op de compileerpagina.

' 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

Voorbeeld 2

In het volgende voorbeeld ziet u een compileertijdfout die wordt veroorzaakt door late binding. Deze categorie van fouten komt overeen met de late binding. De aanroep kan mislukken tijdens runtime op de compileerpagina.

' 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

Voorbeeld 3

In de volgende voorbeelden worden fouten gedemonstreerd die worden veroorzaakt door variabelen die zijn gedeclareerd met een impliciet type Object. Deze categorie van fouten komt overeen met het impliciete type. Er wordt uitgegaan van een voorwaarde op de pagina Compileren.

' 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

Zie ook