Option Strict — InstrukcjaOption Strict Statement

Ogranicza niejawne konwersje typów danych tylko w celu poszerzenia konwersji, nie zezwala na późne wiązanie i nie zezwala na niejawne wpisywanie w wyniku Object typu.Restricts implicit data type conversions to only widening conversions, disallows late binding, and disallows implicit typing that results in an Object type.

SkładniaSyntax

Option Strict { On | Off }  

CzęściParts

TerminTerm DefinicjaDefinition
On Opcjonalna.Optional. Włącza sprawdzanie Option Strict.Enables Option Strict checking.
Off Opcjonalna.Optional. Wyłącza sprawdzanie Option Strict.Disables Option Strict checking.

UwagiRemarks

Gdy Option Strict On lub Option Strict pojawia się w pliku, następujące warunki powodują błąd czasu kompilacji:When Option Strict On or Option Strict appears in a file, the following conditions cause a compile-time error:

  • Niejawne konwersje zawężająceImplicit narrowing conversions

  • Późne wiązanieLate binding

  • Niejawne wpisanie powoduje, że typ ObjectImplicit typing that results in an Object type

Uwaga

W konfiguracjach ostrzeżeń, które można ustawić na stronie kompilowania, Projektant projektu (Visual Basic), istnieją trzy ustawienia odpowiadające trzem warunkom, które powodują błąd w czasie kompilacji.In the warning configurations that you can set on the Compile Page, Project Designer (Visual Basic), there are three settings that correspond to the three conditions that cause a compile-time error. Informacje o sposobach korzystania z tych ustawień znajdują się w sekcji Aby ustawić konfiguracje ostrzeżeń w środowisku IDE w dalszej części tego tematu.For information about how to use these settings, see To set warning configurations in the IDE later in this topic.

Instrukcja Option Strict Off wyłącza wykrywanie błędów i ostrzeżeń dla wszystkich trzech warunków, nawet jeśli skojarzone ustawienia IDE określają, czy te błędy lub ostrzeżenia mają zostać włączone.The Option Strict Off statement turns off error and warning checking for all three conditions, even if the associated IDE settings specify to turn on these errors or warnings. Instrukcja Option Strict On włącza kontrolę błędów i ostrzeżeń dla wszystkich trzech warunków, nawet jeśli skojarzone ustawienia IDE określają, aby wyłączyć te błędy lub ostrzeżenia.The Option Strict On statement turns on error and warning checking for all three conditions, even if the associated IDE settings specify to turn off these errors or warnings.

Jeśli jest używana, instrukcja Option Strict musi znajdować się przed innymi instrukcjami kodu w pliku.If used, the Option Strict statement must appear before any other code statements in a file.

Po ustawieniu Option Strict na On, Visual Basic sprawdza, czy typy danych są określone dla wszystkich elementów programistycznych.When you set Option Strict to On, Visual Basic checks that data types are specified for all programming elements. Typy danych można określić jawnie lub określić za pomocą wnioskowania typu lokalnego.Data types can be specified explicitly, or specified by using local type inference. Zaleca się określenie typów danych dla wszystkich elementów programistycznych, z następujących powodów:Specifying data types for all your programming elements is recommended, for the following reasons:

  • Umożliwia obsługę technologii IntelliSense dla zmiennych i parametrów.It enables IntelliSense support for your variables and parameters. Dzięki temu można zobaczyć swoje właściwości i innych członków podczas wpisywania kodu.This enables you to see their properties and other members as you type code.

  • Umożliwia kompilatorowi wykonywanie kontroli typu.It enables the compiler to perform type checking. Sprawdzanie typu ułatwia znalezienie instrukcji, które mogą zakończyć się niepowodzeniem w czasie wykonywania z powodu błędów konwersji typu.Type checking helps you find statements that can fail at run time because of type conversion errors. Identyfikuje także wywołania metod dla obiektów, które nie obsługują tych metod.It also identifies calls to methods on objects that do not support those methods.

  • Przyspiesza wykonywanie kodu.It speeds up the execution of code. Jedną z przyczyn tego problemu jest to, że jeśli nie określisz typu danych dla elementu programistycznego, kompilator Visual Basic przypisze Object typ.One reason for this is that if you do not specify a data type for a programming element, the Visual Basic compiler assigns it the Object type. Skompilowany kod może wymagać konwersji z powrotem między Object i innymi typami danych, co zmniejsza wydajność.Compiled code might have to convert back and forth between Object and other data types, which reduces performance.

Niejawne Zawężanie błędów konwersjiImplicit Narrowing Conversion Errors

Niejawne Zawężanie błędów konwersji występuje, gdy istnieje niejawna konwersja typu danych, która jest konwersją zawęża.Implicit narrowing conversion errors occur when there is an implicit data type conversion that is a narrowing conversion.

Visual Basic można skonwertować wiele typów danych na inne typy danych.Visual Basic can convert many data types to other data types. Utrata danych może wystąpić, gdy wartość jednego typu danych jest konwertowana na typ danych o mniejszej dokładności lub mniejszej pojemności.Data loss can occur when the value of one data type is converted to a data type that has less precision or a smaller capacity. Błąd czasu wykonywania występuje, gdy taka konwersja nie powiedzie się.A run-time error occurs if such a narrowing conversion fails. Option Strict zapewnia powiadomienie czasu kompilowania tych konwersji zawężających, aby można je było uniknąć.Option Strict ensures compile-time notification of these narrowing conversions so that you can avoid them. Aby uzyskać więcej informacji, zobacz konwersje niejawne i jawne oraz rozszerzanie i zwężanie konwersji.For more information, see Implicit and Explicit Conversions and Widening and Narrowing Conversions.

Konwersje, które mogą spowodować błędy, zawierają niejawne konwersje występujące w wyrażeniach.Conversions that can cause errors include implicit conversions that occur in expressions. Więcej informacji znajduje się w następujących tematach:For more information, see the following topics:

Podczas łączenia ciągów przy użyciu operatora &wszystkie konwersje do ciągów są uznawane za rozszerzające.When you concatenate strings by using the & Operator, all conversions to the strings are considered to be widening. W związku z tym konwersje nie generują niejawnego zawężanego błędu konwersji, nawet jeśli Option Strict jest włączona.So these conversions do not generate an implicit narrowing conversion error, even if Option Strict is on.

Gdy wywoływana jest metoda, która ma argument, który ma typ danych różny od odpowiedniego parametru, konwersja zawęża powoduje błąd czasu kompilacji, jeśli Option Strict jest włączona.When you call a method that has an argument that has a data type different from the corresponding parameter, a narrowing conversion causes a compile-time error if Option Strict is on. Można uniknąć błędów czasu kompilacji przy użyciu konwersji rozszerzającej lub jawnej konwersji.You can avoid the compile-time error by using a widening conversion or an explicit conversion.

Niejawne Zawężanie błędów konwersji jest pomijane w czasie kompilacji w przypadku konwersji z elementów w kolekcji For Each…Next do zmiennej kontroli pętli.Implicit narrowing conversion errors are suppressed at compile-time for conversions from the elements in a For Each…Next collection to the loop control variable. Dzieje się tak nawet wtedy, gdy Option Strict jest włączona.This occurs even if Option Strict is on. Aby uzyskać więcej informacji, zobacz sekcję "Konwersje wąskie" w dla każdego... Next — instrukcja.For more information, see the "Narrowing Conversions" section in For Each...Next Statement.

Błędy późnego wiązaniaLate Binding Errors

Obiekt jest późnie powiązany, gdy jest przypisany do właściwości lub metody zmiennej, która jest zadeklarowana jako typu Object.An object is late bound when it is assigned to a property or method of a variable that is declared to be of type Object. Aby uzyskać więcej informacji, zobacz wczesne i późne wiązanie.For more information, see Early and Late Binding.

Niejawne błędy typu obiektuImplicit Object Type Errors

Niejawne błędy typu obiektu występują, gdy nie można wywnioskować odpowiedniego typu dla zadeklarowanej zmiennej, więc typ Object jest wywnioskowany.Implicit object type errors occur when an appropriate type cannot be inferred for a declared variable, so a type of Object is inferred. Dzieje się tak głównie w przypadku używania instrukcji Dim do deklarowania zmiennej bez użycia klauzuli As, a Option Infer jest wyłączona.This primarily occurs when you use a Dim statement to declare a variable without using an As clause, and Option Infer is off. Aby uzyskać więcej informacji, zobacz temat opcja wnioskowanie i Specyfikacja języka Visual Basic.For more information, see Option Infer Statement and the Visual Basic Language Specification.

W przypadku parametrów metody klauzula As jest opcjonalna, jeśli Option Strict jest wyłączona.For method parameters, the As clause is optional if Option Strict is off. Jeśli jednak którykolwiek z parametrów używa klauzuli As, wszystkie muszą z niej korzystać.However, if any one parameter uses an As clause, they all must use it. Jeśli Option Strict jest włączona, klauzula As jest wymagana dla każdej definicji parametru.If Option Strict is on, the As clause is required for every parameter definition.

Jeśli deklarujesz zmienną bez użycia klauzuli As i ustawisz ją na Nothing, zmienna ma typ Object.If you declare a variable without using an As clause and set it to Nothing, the variable has a type of Object. W tym przypadku nie występuje błąd czasu kompilacji, gdy Option Strict jest włączona i Option Infer jest włączona.No compile-time error occurs in this case when Option Strict is on and Option Infer is on. Przykładem tego jest Dim something = Nothing.An example of this is Dim something = Nothing.

Domyślne typy danych i wartościDefault Data Types and Values

W poniższej tabeli opisano wyniki różnych kombinacji określania typu danych i inicjatora w instrukcji Dim.The following table describes the results of various combinations of specifying the data type and initializer in a Dim Statement.

Określono typ danych?Data type specified? Określono inicjator?Initializer specified? PrzykładExample WynikResult
NieNo NieNo Dim qty Jeśli Option Strict jest wyłączone (wartość domyślna), zmienna jest ustawiona na Nothing.If Option Strict is off (the default), the variable is set to Nothing.

Jeśli Option Strict jest włączona, wystąpi błąd w czasie kompilacji.If Option Strict is on, a compile-time error occurs.
NieNo TakYes Dim qty = 5 Jeśli Option Infer jest włączone (wartość domyślna), zmienna Pobiera typ danych inicjatora.If Option Infer is on (the default), the variable takes the data type of the initializer. Zobacz wnioskowanie o typie lokalnym.See Local Type Inference.

Jeśli Option Infer jest wyłączone i Option Strict jest wyłączone, zmienna Pobiera typ danych Object.If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Jeśli Option Infer jest wyłączona i Option Strict jest włączona, wystąpi błąd w czasie kompilacji.If Option Infer is off and Option Strict is on, a compile-time error occurs.
TakYes NieNo Dim qty As Integer Zmienna jest inicjowana do wartości domyślnej dla typu danych.The variable is initialized to the default value for the data type. Aby uzyskać więcej informacji, zobacz Dim Statement.For more information, see Dim Statement.
TakYes TakYes Dim qty As Integer = 5 Jeśli typ danych inicjatora nie zostanie przekonwertowany na określony typ danych, wystąpi błąd w czasie kompilacji.If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

Gdy nie ma instrukcji Option StrictWhen an Option Strict Statement Is Not Present

Jeśli kod źródłowy nie zawiera instrukcji Option Strict, używane jest ustawienie Option Strict na stronie kompilowania, projektant projektu (Visual Basic) .If the source code does not contain an Option Strict statement, the Option strict setting on the Compile Page, Project Designer (Visual Basic) is used. Strona kompilacja zawiera ustawienia, które zapewniają dodatkową kontrolę nad warunkami, które generują błąd.The Compile Page has settings that provide additional control over the conditions that generate an error.

Jeśli używasz kompilatora wiersza polecenia, możesz użyć opcji kompilatora -optionstrict , aby określić ustawienie dla Option Strict.If you are using the command-line compiler, you can use the -optionstrict compiler option to specify a setting for Option Strict.

Aby ustawić ustawienie Option Strict w środowisku IDETo set Option Strict in the 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.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia.The Visual Studio edition that you have and the settings that you use determine these elements. Aby uzyskać więcej informacji, zobacz personalizowanie środowiska IDE.For more information, see Personalizing the IDE.

  1. W Eksplorator rozwiązańwybierz projekt.In Solution Explorer, select a project. W menu projekt kliknij polecenie Właściwości.On the Project menu, click Properties.

  2. Na karcie Kompilowanie ustaw wartość w polu Option Strict .On the Compile tab, set the value in the Option Strict box.

Aby ustawić konfiguracje ostrzeżeń w IDETo set warning configurations in the IDE

Gdy używasz strony Kompilacja, Projektant projektu (Visual Basic) zamiast instrukcji Option Strict, masz dodatkową kontrolę nad warunkami, które generują błędy.When you use the Compile Page, Project Designer (Visual Basic) instead of an Option Strict statement, you have additional control over the conditions that generate errors. Sekcja konfiguracje ostrzeżeń na stronie kompilacja zawiera ustawienia, które odpowiadają trzem warunkom, które powodują błąd w czasie kompilacji, gdy Option Strict jest włączona.The Warning configurations section of the Compile Page has settings that correspond to the three conditions that cause a compile-time error when Option Strict is on. Poniżej przedstawiono następujące ustawienia:Following are these settings:

  • Niejawna konwersjaImplicit conversion

  • Późne wiązanie; Wywołanie może zakończyć się niepowodzeniem w czasie wykonywaniaLate binding; call could fail at run time

  • Niejawny typ; przyjęto obiektImplicit type; object assumed

Jeśli ustawisz opcję Strict to on, wszystkie trzy z tych ustawień konfiguracyjnych ostrzeżeń mają ustawioną wartość błąd.When you set Option Strict to On, all three of these warning configuration settings are set to Error. Ustawienie opcji Strict to offpowoduje, że wszystkie trzy ustawienia mają wartość none.When you set Option Strict to Off, all three settings are set to None.

Można indywidualnie zmienić każde ustawienie konfiguracji ostrzegawczej na none, Warninglub Error.You can individually change each warning configuration setting to None, Warning, or Error. Jeśli wszystkie trzy ustawienia konfiguracji ostrzegawczej są ustawione na błąd, On pojawia się w polu Option strict.If all three warning configuration settings are set to Error, On appears in the Option strict box. Jeśli wszystkie trzy wartości są ustawione na Brak, w tym polu pojawia się Off.If all three are set to None, Off appears in this box. Dla każdej innej kombinacji tych ustawień pojawia się (niestandardowe) .For any other combination of these settings, (custom) appears.

Aby ustawić ustawienie opcji Stricted Default dla nowych projektówTo set the Option Strict default setting for new projects

Podczas tworzenia projektu ustawienie opcji Strict na karcie kompilowania jest ustawione na wartość ustawienia Strict w oknie dialogowym Opcje .When you create a project, the Option Strict setting on the Compile tab is set to the Option Strict setting in the Options dialog box.

Aby ustawić Option Strict w tym oknie dialogowym, w menu Narzędzia kliknij polecenie Opcje.To set Option Strict in this dialog box, on the Tools menu, click Options. W oknie dialogowym Opcje rozwiń węzeł projekty i rozwiązania, a następnie kliknij pozycję Ustawienia domyślne w języku VB.In the Options dialog box, expand Projects and Solutions, and then click VB Defaults. Początkowe domyślne ustawienie w języku VB domyślnie jest Off.The initial default setting in VB Defaults is Off.

Aby ustawić Option Strict w wierszu poleceniaTo set Option Strict on the command line

Dołącz opcję kompilatora -optionstrict w poleceniu VBC .Include the -optionstrict compiler option in the vbc command.

PrzykładExample

W poniższych przykładach przedstawiono błędy czasu kompilowania spowodowane przez niejawne konwersje typów, które są zawężające konwersje.The following examples demonstrate compile-time errors caused by implicit type conversions that are narrowing conversions. Ta kategoria błędów odpowiada warunkowi niejawnej konwersji na stronie kompilowania.This category of errors corresponds to the Implicit conversion condition on the Compile Page.

' 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ładExample

Poniższy przykład demonstruje błąd czasu kompilacji spowodowany późnym wiązaniem.The following example demonstrates a compile-time error caused by late binding. Ta kategoria błędów odnosi się do późnego wiązania; wywołanie może zakończyć się niepowodzeniem w czasie wykonywania na stronie kompilacji.This category of errors corresponds to the Late binding; call could fail at run time condition on the Compile Page.

' 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ładExample

W poniższych przykładach przedstawiono błędy spowodowane przez zmienne, które są zadeklarowane przy użyciu niejawnego typu Object.The following examples demonstrate errors caused by variables that are declared with an implicit type of Object. Ta kategoria błędów odpowiada typowi niejawnemu; obiekt przyjmuje warunek na stronie kompilowania.This category of errors corresponds to the Implicit type; object assumed condition on the Compile Page.

' 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 takżeSee also