Historia pytania
Opcja Option Strict pojawiła się w Visual Basic .NET, aby zwiększyć bezpieczeństwo typów. W wcześniejszych wersjach języka (VB6) zachodziły niejawne konwersje typów, co prowadziło do nieoczekiwanego zachowania programu i trudnych do wychwycenia błędów. Włączony Strict sprawia, że zachowanie jest bardziej oczywiste i ściśle typowane.
Problem
Niejawna konwersja typów (np. przypisywanie ciągu znaków do zmiennej liczbowej lub zwracanie różnych typów z funkcji) prowadzi do błędów w czasie wykonania. Projekty z Option Strict Off często są źródłem trudnych do zidentyfikowania błędów.
Rozwiązanie
Przy Option Strict On nie można stosować niejawnych konwersji typów, wszystkie deklaracje zmiennych, parametry i zwracane typy funkcji muszą być wyraźnie określone. To zapobiega całej klasie błędów już na etapie kompilacji i sprzyja wysokiej jakości kodu.
Przykład kodu:
Option Strict On Dim x As Integer x = "123" ' Błąd kompilacji — konwersja jawna jest obowiązkowa x = CInt("123") ' OK Function GetNumber(ByVal input As String) As Integer Return input ' Błąd kompilacji End Function
Kluczowe cechy:
Po co potrzebny jest Option Strict Off, jeśli z Strict On jest wygodniej i bezpieczniej?
Option Strict Off jest używane do wsparcia starego kodu, w którym wiele niejawnych konwersji jest już wbudowanych (np. migracja z VB6). W nowych projektach zaleca się włączenie Strict dla bardziej niezawodnego i bezpiecznego kodu.
Czy można przywrócić ścisłość wyboru typów na poziomie pliku, jeśli w projekcie domyślnie jest Off?
Tak, można dodać dyrektywę Option Strict On na początku osobnego modułu lub pliku, a ścisła kontrola typów będzie stosowana tylko do tego pliku.
' Na początku pliku: Option Strict On
Czy Strict przeszkadza w używaniu late binding przez Object?
Tak, z Option Strict On nie można wywoływać członków obiektów nieznanych w czasie kompilacji (late binding). Należy przekształcać obiekty do znanego typu przez interfejsy lub używać dynamicznej pracy tylko z Off.
Programista nie włączył Option Strict, a przy wprowadzaniu danych z pola tekstowego TextBox wartości były bezpośrednio przypisywane do zmiennych liczbowych. Przy wprowadzaniu błędnych danych program ulegał awarii.
Zalety:
Wady:
Programista włączył Option Strict On, wszystkie konwersje były realizowane jawnie przez TryParse. Błędy były wychwytywane na etapie kompilacji, wyjątki w czasie wykonania były minimalne.
Zalety:
Wady: