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 On
insteltOption 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 tussenObject
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 Object
wordt 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 Nothing
op , 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 Strict
op 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.
Selecteer een project in Solution Explorer. Klik in het menu Project op Eigenschappen.
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
- Conversies breder maken en verkleinen
- Impliciete en expliciete conversies
- Pagina compileren, ProjectOntwerper (Visual Basic)
- Expliciete optie-instructie
- Typeconversiefuncties
- Procedure: Leden van een object openen
- Ingesloten expressies in XML
- Ontspannen conversie van gemachtigde
- Late binding in Office-oplossingen
- -optionstrict
- Visual Basic-standaardinstellingen, projecten, dialoogvenster Opties