Alternativ strikt -instruktion

Begränsar implicita datatypskonverteringar till att endast bredda konverteringar, inte tillåter sen bindning och tillåter inte implicit inmatning som resulterar i en Object typ.

Syntax

Option Strict { On | Off }

Delar

Period Definition
On Valfritt. Aktiverar Option Strict kontroll.
Off Valfritt. Inaktiverar Option Strict kontroll.

Kommentarer

När Option Strict On eller Option Strict visas i en fil orsakar följande villkor ett kompileringsfel:

  • Implicit minskning av konverteringar

  • Sen bindning

  • Implicit inmatning som resulterar i en Object typ

Kommentar

I de varningskonfigurationer som du kan ange på kompileringssidan, Projektdesigner (Visual Basic) finns det tre inställningar som motsvarar de tre villkor som orsakar ett kompileringsfel. Information om hur du använder de här inställningarna finns i Ange varningskonfigurationer i IDE senare i det här avsnittet.

Instruktionen Option Strict Off inaktiverar fel- och varningskontroll för alla tre villkor, även om de associerade IDE-inställningarna anger att dessa fel eller varningar ska aktiveras. Instruktionen Option Strict On aktiverar fel- och varningskontroll för alla tre villkor, även om de associerade IDE-inställningarna anger att dessa fel eller varningar ska inaktiveras.

Om den används måste -instruktionen Option Strict visas före andra kodinstruktioner i en fil.

När du anger Option Strict till Onkontrollerar Visual Basic att datatyper har angetts för alla programmeringselement. Datatyper kan anges explicit eller anges med hjälp av lokal typinferens. Du rekommenderas att ange datatyper för alla dina programmeringselement av följande skäl:

  • Det aktiverar IntelliSense-stöd för dina variabler och parametrar. På så sätt kan du se deras egenskaper och andra medlemmar när du skriver kod.

  • Det gör att kompilatorn kan utföra typkontroll. Typkontroll hjälper dig att hitta instruktioner som kan misslyckas vid körning på grund av typkonverteringsfel. Den identifierar även anrop till metoder på objekt som inte stöder dessa metoder.

  • Det påskyndar körningen av kod. En orsak till detta är att om du inte anger någon datatyp för ett programmeringselement tilldelar Visual Basic-kompilatorn den Object typen. Kompilerad kod kan behöva konverteras fram och tillbaka mellan Object och andra datatyper, vilket minskar prestandan.

Implicita konverteringsfel

Implicita konverteringsfel uppstår när det finns en implicit datatypkonvertering som är en begränsad konvertering.

Visual Basic kan konvertera många datatyper till andra datatyper. Dataförlust kan inträffa när värdet för en datatyp konverteras till en datatyp som har mindre precision eller mindre kapacitet. Ett körningsfel uppstår om en sådan begränsad konvertering misslyckas. Option Strict säkerställer kompileringstidsmeddelande för dessa begränsade konverteringar så att du kan undvika dem. Mer information finns i Implicita och explicita konverteringar och Utvidga och begränsa konverteringar.

Konverteringar som kan orsaka fel inkluderar implicita konverteringar som inträffar i uttryck. Mer information finns i följande avsnitt:

När du sammanfogar strängar med hjälp av operatorn &, anses alla konverteringar till strängarna vara bredare. Dessa konverteringar genererar därför inte ett implicit begränsat konverteringsfel, även om Option Strict det är aktiverat.

När du anropar en metod som har ett argument som har en annan datatyp än motsvarande parameter, orsakar en begränsad konvertering ett kompileringsfel om Option Strict den är på. Du kan undvika kompileringstidsfelet med hjälp av en bredare konvertering eller en explicit konvertering.

Implicita konverteringsfel undertrycks vid kompileringstid för konverteringar från elementen i en For Each…Next samling till loopkontrollvariabeln. Detta inträffar även om Option Strict det är aktiverat. Mer information finns i avsnittet "Begränsa konverteringar" i För varje... Nästa instruktion.

Fel vid sen bindning

Ett objekt är sent bundet när det tilldelas till en egenskap eller metod för en variabel som deklareras vara av typen Object. Mer information finns i Tidig och Sen bindning.

Implicita objekttypsfel

Implicita objekttypfel uppstår när en lämplig typ inte kan härledas för en deklarerad variabel, så en typ av Object härleds. Detta inträffar främst när du använder en Dim -instruktion för att deklarera en variabel utan att använda en As -sats och Option Infer är avstängd. Mer information finns i Alternativ härledningsinstrukation och Visual Basic Language Specification.

För metodparametrar är satsen valfri om Option Strict den As är inaktiverad. Men om någon parameter använder en As -sats måste alla använda den. Om Option Strict är på As krävs -satsen för varje parameterdefinition.

Om du deklarerar en variabel utan att använda en As sats och ställer in den på Nothinghar variabeln en typ av Object. Inget kompileringsfel inträffar i det här fallet när Option Strict är på och Option Infer är aktiverat. Ett exempel på detta är Dim something = Nothing.

Standarddatatyper och -värden

I följande tabell beskrivs resultatet av olika kombinationer av att ange datatypen och initieraren i en Dim-instruktion.

Angiven datatyp? Har initieraren angetts? Exempel Resultat
Nej Nej Dim qty Om Option Strict är av (standardvärdet) är variabeln inställd på Nothing.

Om Option Strict är på uppstår ett kompileringsfel.
Nej Ja Dim qty = 5 Om Option Infer är på (standardvärdet) tar variabeln initiatorns datatyp. Se Slutsatsdragning av lokal typ.

Om Option Infer är av och Option Strict är av tar variabeln datatypen Object.

Om Option Infer är av och Option Strict är på uppstår ett kompileringsfel.
Ja Nej Dim qty As Integer Variabeln initieras till standardvärdet för datatypen. Mer information finns i Dim-instruktion.
Ja Ja Dim qty As Integer = 5 Om datatypen för initieraren inte kan konverteras till den angivna datatypen uppstår ett kompileringsfel.

När ett strikt alternativ-uttryck inte finns

Om källkoden inte innehåller någon Option Strict instruktion används inställningen Alternativ strikt på kompileringssidan, Projektdesigner (Visual Basic).sidan Kompilering finns inställningar som ger ytterligare kontroll över de villkor som genererar ett fel.

Om du använder kommandoradskompilatorn kan du använda kompilatoralternativet -optionstrict för att ange en inställning för Option Strict.

Så här anger du Alternativet strikt i IDE

Kommentar

Datorn kan visa olika namn eller platser för vissa av Visual Studio-användargränssnittselementen i följande instruktioner. Den Visual Studio-utgåva som du har och de inställningar som du använder avgör dessa element. Mer information finns i Anpassa IDE.

  1. I Solution Explorer väljer du ett projekt. Klicka på Egenskaperprojektmenyn.

  2. På fliken Kompilering anger du värdet i rutan Alternativ strikt.

Ange varningskonfigurationer i IDE

När du använder kompileringssidan , Projektdesignern (Visual Basic) i stället för en Option Strict instruktion, har du ytterligare kontroll över de villkor som genererar fel. Avsnittet Varningskonfigurationer på kompileringssidan innehåller inställningar som motsvarar de tre villkor som orsakar ett kompileringsfel när Option Strict den är på. Följande är dessa inställningar:

  • Implicit konvertering

  • Sen bindning; anropet kan misslyckas vid körning

  • Implicit typ; antaget objekt

När du anger Alternativet strikt till är alla tre av dessa varningskonfigurationsinställningar inställda på Fel. När du anger Alternativet strikt till Av är alla tre inställningarna inställda på Ingen.

Du kan ändra varje varningskonfigurationsinställning individuellt till Ingen, Varning eller Fel. Om alla tre varningskonfigurationsinställningarna är inställda på Fel visas On i rutan Option strict . Om alla tre är inställda på Ingen visas Off i den här rutan. För alla andra kombinationer av de här inställningarna visas (anpassad).

Så här anger du standardinställningen Alternativ strikt för nya projekt

När du skapar ett projekt anges inställningen Alternativ striktfliken Kompilering till inställningen Alternativ strikt i dialogrutan Alternativ .

Om du vill ange Option Strict i den här dialogrutan går du till menyn Verktyg och klickar på Alternativ. I dialogrutan Alternativ expanderar du Projekt och lösningar och klickar sedan på VB-standardvärden. Den första standardinställningen i VB Defaults är Off.

Så här anger du Alternativ strikt på kommandoraden

Inkludera alternativet -optionstrict compiler i vbc-kommandot.

Exempel 1

I följande exempel visas kompileringsfel som orsakas av implicita typkonverteringar som begränsar konverteringarna. Den här felkategorin motsvarar villkoret implicit konvertering på kompileringssidan.

' 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

Exempel 2

I följande exempel visas ett kompileringsfel som orsakas av sen bindning. Den här felkategorin motsvarar bindningen Sen. anropet kan misslyckas vid körning påkompileringssidan.

' 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

Exempel 3

Följande exempel visar fel som orsakas av variabler som deklareras med en implicit typ av Object. Den här felkategorin motsvarar den implicita typen, objektets antagna villkor på kompileringssidan.

' 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

Se även