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 Strict
On
program 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 typamiObject
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 Nothing wartość .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 Object danych .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 Strict
elementu .
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.
W Eksplorator rozwiązań wybierz projekt. W menu Project (Projekt) kliknij pozycję Properties (Właściwości).
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ż
- Rozszerzanie i zwężanie konwersji
- Konwersje jawne i niejawne
- Strona kompilowania, Projektant projektu (Visual Basic)
- Option Explicit, instrukcja
- Funkcje konwersji typu
- Instrukcje: dostęp do elementów członkowskich obiektu
- Wyrażenia osadzone w XML
- Swobodna konwersja delegatów
- Późne powiązania w rozwiązaniach pakietu Office
- -optionstrict
- Domyślne ustawienia programu Visual Basic, Projekty, Opcje — okno dialogowe