Option Strict — Instrukcja

Ogranicza niejawne konwersje typów danych tylko do rozszerzania konwersji, nie zezwala na późne powiązanie i nie zezwala na niejawne wpisywanie, które powoduje Object typ.

Składnia

Option Strict { On | Off }

generatora

Termin Definicja
On Opcjonalny. Włącza Option Strict sprawdzanie.
Off Opcjonalny. Wyłącza Option Strict sprawdzanie.

Uwagi

Gdy Option Strict On plik lub Option Strict pojawi się w pliku, następujące warunki powodują błąd czasu kompilacji:

  • Niejawne konwersje zawężające

  • Opóźnione powiązanie

  • Niejawne wpisywanie, które powoduje Object typ

Uwaga

W konfiguracjach ostrzegawczych, które można ustawić na stronie kompilacji, Project Projektant (Visual Basic), istnieją trzy ustawienia, które odpowiadają trzem warunkom, które powodują błąd czasu kompilacji. Aby uzyskać informacje o sposobie korzystania z tych ustawień, zobacz Aby ustawić konfiguracje ostrzeżeń w środowisku IDE w dalszej części tego tematu.

Instrukcja Option Strict Off wyłącza sprawdzanie błędów i ostrzeżeń dla wszystkich trzech warunków, nawet jeśli skojarzone ustawienia środowiska IDE określają, aby włączyć te błędy lub ostrzeżenia. Instrukcja Option Strict On włącza sprawdzanie błędów i ostrzeżeń dla wszystkich trzech warunków, nawet jeśli skojarzone ustawienia środowiska IDE określają, aby wyłączyć te błędy lub ostrzeżenia.

W przypadku użycia instrukcja musi być wyświetlana Option Strict przed wszelkimi innymi instrukcjami kodu w pliku.

Po ustawieniu wartości Option StrictOnprogram Visual Basic sprawdza, czy typy danych są określone dla wszystkich elementów programowania. Typy danych można określić jawnie lub określić przy użyciu wnioskowania typu lokalnego. Zalecane jest określenie typów danych dla wszystkich elementów programowania z następujących powodów:

  • Umożliwia obsługę funkcji IntelliSense dla zmiennych i parametrów. Dzięki temu można wyświetlać ich właściwości i inne elementy członkowskie podczas wpisywania kodu.

  • Umożliwia kompilatorowi przeprowadzanie sprawdzania typów. Sprawdzanie typów pomaga znaleźć instrukcje, które mogą zakończyć się niepowodzeniem w czasie wykonywania z powodu błędów konwersji typów. Identyfikuje również wywołania metod dla obiektów, które nie obsługują tych metod.

  • Przyspiesza wykonywanie kodu. Jednym z powodów jest to, że jeśli nie określisz typu danych dla elementu programowania, kompilator języka Visual Basic przypisuje mu Object typ. Skompilowany kod może być musiał przekonwertować między i innymi typami Object danych, co zmniejsza wydajność.

Niejawne błędy konwersji zawężania

Niejawne błędy konwersji zawężania występują, gdy istnieje niejawna konwersja typu danych, która jest konwersją zawężającą.

Język Visual Basic może konwertować wiele typów danych na inne typy danych. Utrata danych może wystąpić, gdy wartość jednego typu danych jest konwertowana na typ danych o mniejszej precyzji lub mniejszej pojemności. Błąd czasu wykonywania występuje, jeśli taka konwersja zawężania nie powiedzie się. Option Strict zapewnia powiadomienie o czasie kompilacji tych konwersji zawężających, dzięki czemu można ich uniknąć. Aby uzyskać więcej informacji, zobacz Niejawne i jawne konwersje oraz Konwersje rozszerzania i zawężania.

Konwersje, które mogą powodować błędy, obejmują niejawne konwersje występujące w wyrażeniach. Aby uzyskać więcej informacji, zobacz następujące tematy:

Podczas łączenia ciągów przy użyciu operatora i wszystkie konwersje na ciągi są uważane za rozszerzające. Dlatego te konwersje nie generują niejawnego błędu konwersji zawężania, nawet jeśli Option Strict jest włączona.

W przypadku wywołania metody, która ma argument o typie danych innym niż odpowiedni parametr, konwersja zawężania powoduje błąd czasu kompilacji, jeśli Option Strict jest włączony. Można uniknąć błędu czasu kompilacji przy użyciu konwersji rozszerzającej lub jawnej konwersji.

Niejawne błędy konwersji zawężania są pomijane w czasie kompilacji dla konwersji z elementów w For Each…Next kolekcji do zmiennej sterującej pętli. Dzieje się tak nawet wtedy, gdy Option Strict jest włączona. Aby uzyskać więcej informacji, zobacz sekcję "Zawężanie konwersji" w temacie Dla każdego... Następna instrukcja.

Błędy opóźnionia powiązania

Obiekt jest opóźniony, gdy jest przypisany do właściwości lub metody zmiennej, która jest zadeklarowana jako typu Object. Aby uzyskać więcej informacji, zobacz Wczesne i późne powiązanie.

Niejawne błędy typu obiektu

Niejawne błędy typu obiektu występują, gdy nie można wywnioskować odpowiedniego Object typu dla zadeklarowanej zmiennej, więc typ jest wnioskowany. Dzieje się tak przede wszystkim, gdy używasz Dim instrukcji do deklarowania zmiennej bez używania As klauzuli i Option Infer jest wyłączona. Aby uzyskać więcej informacji, zobacz Option Infer Statement (Instrukcja wnioskowania opcji) i Visual Basic Language Specification ( Specyfikacja języka Visual Basic).

W przypadku parametrów metody klauzula jest opcjonalna As , jeśli Option Strict jest wyłączona. Jeśli jednak jeden parametr używa klauzuli As , wszystkie muszą go używać. Jeśli Option Strict jest włączona, klauzula jest wymagana As dla każdej definicji parametru.

Jeśli zadeklarowasz zmienną bez użycia klauzuli As i ustawisz ją na Nothing, zmienna ma typ Object. W takim przypadku nie występuje błąd czasu kompilacji, gdy Option Strict jest włączony i Option Infer włączony. Przykładem tego jest Dim something = Nothing.

Domyślne typy danych i wartości

W poniższej tabeli opisano wyniki różnych kombinacji określania typu danych i inicjatora w instrukcji Dim.

Określony typ danych? Określony inicjator? Przykład Result
Nie Nie. Dim qty Jeśli Option Strict wartość jest wyłączona (wartość domyślna), zmienna jest ustawiona na Nothingwartość .

W przypadku Option Strict włączenia wystąpi błąd czasu kompilacji.
Nie. Tak Dim qty = 5 Jeśli Option Infer parametr jest włączony (wartość domyślna), zmienna przyjmuje typ danych inicjatora. Zobacz Wnioskowanie typu lokalnego.

Jeśli Option Infer wartość jest wyłączona i Option Strict wyłączona, zmienna pobiera typ Objectdanych .

Jeśli Option Infer jest wyłączona i Option Strict jest włączona, wystąpi błąd czasu kompilacji.
Tak Nie. Dim qty As Integer Zmienna jest inicjowana do wartości domyślnej dla typu danych. Aby uzyskać więcej informacji, zobacz Dim, instrukcja.
Tak Tak Dim qty As Integer = 5 Jeśli typ danych inicjatora nie jest konwertowany na określony typ danych, wystąpi błąd czasu kompilacji.

Gdy instrukcja strict opcji nie jest obecna

Jeśli kod źródłowy nie zawiera Option Strict instrukcji, zostanie użyte ustawienie Opcji ścisłe na stronie kompilacji, zostanie użyte Projektant projektu (Visual Basic). Strona kompilowania zawiera ustawienia, które zapewniają dodatkową kontrolę nad warunkami, które generują błąd.

Jeśli używasz kompilatora wiersza polecenia, możesz użyć opcji -optionstrict kompilatora, aby określić ustawienie dla Option Strictelementu .

Aby ustawić opcję Ścisła w środowisku IDE

Uwaga

Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.

  1. W Eksplorator rozwiązań wybierz projekt. W menu Project (Projekt) kliknij pozycję Properties (Właściwości).

  2. Na karcie Kompilowanie ustaw wartość w polu Opcja Ścisła.

Aby ustawić konfiguracje ostrzegawcze w środowisku IDE

Jeśli używasz strony kompilowania, program Project Projektant (Visual Basic) zamiast instrukcjiOption Strict, masz dodatkową kontrolę nad warunkami, które generują błędy. Sekcja Konfiguracja ostrzeżeń na stronie kompilacji zawiera ustawienia odpowiadające trzem warunkom, które powodują błąd czasu kompilacji, gdy Option Strict jest włączony. Poniżej przedstawiono następujące ustawienia:

  • Niejawna konwersja

  • Opóźnione powiązanie; wywołanie może zakończyć się niepowodzeniem w czasie wykonywania

  • Typ niejawny; zakładany obiekt

Po ustawieniu opcji Strict na Wartość Włączone wszystkie trzy z tych ustawień konfiguracji ostrzeżenia są ustawione na Wartość Błąd. Po ustawieniu opcji Strict na Wartość Wyłączone wszystkie trzy ustawienia są ustawione na Wartość Brak.

Każde ustawienie konfiguracji ostrzeżenia można zmienić indywidualnie na Brak, Ostrzeżenie lub Błąd. Jeśli wszystkie trzy ustawienia konfiguracji ostrzeżenia są ustawione na Błąd, On pojawi się w Option strict polu . Jeśli wszystkie trzy są ustawione na Brak, Off pojawi się w tym polu. W przypadku każdej innej kombinacji tych ustawień pojawi się (niestandardowa).

Aby ustawić ustawienie domyślne Opcji Ścisłe dla nowych projektów

Podczas tworzenia projektu ustawienie Opcja Ścisła na karcie Kompilowanie jest ustawione na ustawienie Opcji Ścisłe w oknie dialogowym Opcje .

Aby ustawić Option Strict w tym oknie dialogowym, w menu Narzędzia kliknij pozycję Opcje. W oknie dialogowym Opcje rozwiń węzeł Projekty i rozwiązania, a następnie kliknij pozycję Domyślne VB. Początkowe ustawienie domyślne w ustawieniach domyślnych VB to Off.

Aby ustawić opcję Strict w wierszu polecenia

Dołącz opcję -optionstrict kompilatora w poleceniu vbc.

Przykład 1

W poniższych przykładach pokazano błędy czasu kompilacji spowodowane niejawnymi konwersjami typów, które są konwersjami zawężanymi. Ta kategoria błędów odpowiada warunkowi niejawnej konwersji na stronie kompilacji.

' 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

Przykład 2

W poniższym przykładzie pokazano błąd czasu kompilacji spowodowany późnym powiązaniem. Ta kategoria błędów odpowiada opóźnionemu powiązaniu . Wywołanie może zakończyć się niepowodzeniem w czasie wykonywania na stronie kompilacji.

' 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

Przykład 3

W poniższych przykładach pokazano błędy spowodowane przez zmienne zadeklarowane za pomocą niejawnego typu Object. Ta kategoria błędów odpowiada typowi niejawnemu; obiekt zakładał warunek na stronie kompilacji.

' 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

Zobacz też