다음을 통해 공유


Option Strict 문

암시적 데이터 형식 변환을 확대 변환으로만 제한하고, 지연 바인딩을 허용하지 않으며, 형식을 생성하는 Object 암시적 입력을 허용하지 않습니다.

문법

Option Strict { On | Off }

부분

기간 정의
On 선택 사항입니다. 검사를 사용하도록 Option Strict 설정합니다.
Off 선택 사항입니다. 검사를 사용하지 Option Strict 않도록 설정합니다.

비고

파일에 표시되거나 Option Strict 파일에 나타나면 Option Strict On 다음 조건으로 인해 컴파일 시간 오류가 발생합니다.

  • 암시적 축소 변환

  • 지연 바인딩

  • Object 형식을 생성하는 암시적 입력

비고

컴파일 페이지, 프로젝트 디자이너(Visual Basic)에서 설정할 수 있는 경고 구성에는 컴파일 시간 오류를 일으키는 세 가지 조건에 해당하는 세 가지 설정이 있습니다. 이러한 설정을 사용하는 방법에 대한 자세한 내용은 이 항목의 뒷부분에 있는 IDE에서 경고 구성을 설정하려면 을 참조하세요.

이 문은 Option Strict Off 연결된 IDE 설정이 이러한 오류 또는 경고를 설정하도록 지정하는 경우에도 세 가지 조건 모두에 대한 오류 및 경고 검사를 해제합니다. 이 문은 Option Strict On 연결된 IDE 설정이 이러한 오류 또는 경고를 해제하도록 지정하는 경우에도 세 가지 조건 모두에 대한 오류 및 경고 검사를 켭니다.

사용하는 경우 해당 문이 파일의 Option Strict 다른 코드 문 앞에 나타나야 합니다.

설정 Option StrictOn하면 Visual Basic에서 모든 프로그래밍 요소에 대해 데이터 형식이 지정되어 있는지 확인합니다. 데이터 형식은 명시적으로 지정하거나 로컬 형식 유추를 사용하여 지정할 수 있습니다. 다음과 같은 이유로 모든 프로그래밍 요소에 대한 데이터 형식을 지정하는 것이 좋습니다.

  • 이를 통해 변수 및 매개 변수에 대한 IntelliSense 지원을 사용할 수 있습니다. 이렇게 하면 코드를 입력할 때 해당 속성 및 다른 멤버를 볼 수 있습니다.

  • 컴파일러에서 형식 검사를 수행할 수 있습니다. 형식 검사를 사용하면 형식 변환 오류로 인해 런타임에 실패할 수 있는 문을 찾을 수 있습니다. 또한 이러한 메서드를 지원하지 않는 개체에 대한 메서드 호출을 식별합니다.

  • 코드 실행 속도를 향상합니다. 한 가지 이유는 프로그래밍 요소에 대한 데이터 형식을 지정하지 않으면 Visual Basic 컴파일러가 해당 형식을 할당하기 때문입니다 Object . 컴파일된 코드는 다른 데이터 형식과 다른 데이터 형식 간에 Object 변환해야 하므로 성능이 저하될 수 있습니다.

암시적 축소 변환 오류

암시적 축소 변환 오류는 축소 변환인 암시적 데이터 형식 변환이 있을 때 발생합니다.

Visual Basic은 많은 데이터 형식을 다른 데이터 형식으로 변환할 수 있습니다. 데이터 손실은 한 데이터 형식의 값이 정밀도가 낮거나 용량이 작은 데이터 형식으로 변환되는 경우에 발생할 수 있습니다. 이러한 축소 변환이 실패하면 런타임 오류가 발생합니다. Option Strict 는 이러한 축소 변환의 컴파일 시간 알림을 보장하여 방지할 수 있도록 합니다. 자세한 내용은 암시적 및 명시적 변환 및확대/축소 변환을 참조하세요.

오류를 일으킬 수 있는 변환에는 식에서 발생하는 암시적 변환이 포함됩니다. 자세한 내용은 다음 항목을 참조하세요.

&연산자를 사용하여 문자열을 연결할 때 문자열로의 모든 변환은 확대되는 것으로 간주됩니다. 따라서 이러한 변환은 켜진 경우에도 Option Strict 암시적 축소 변환 오류를 생성하지 않습니다.

데이터 형식이 해당 매개 변수와 다른 인수가 있는 메서드를 호출하는 경우 축소 변환으로 인해 컴파일 시간 오류가 Option Strict 발생합니다. 확대 변환 또는 명시적 변환을 사용하여 컴파일 시간 오류를 방지할 수 있습니다.

컬렉션의 요소 For Each…Next 에서 루프 제어 변수로 변환하기 위해 컴파일 타임에 암시적 축소 변환 오류가 표시되지 않습니다. 이 오류는 켜진 경우에도 Option Strict 발생합니다. 자세한 내용은 For Each...의 "축소 변환" 섹션을 참조하세요. 다음 문입니다.

지연 바인딩 오류

개체는 Object형식으로 선언된 변수의 속성 또는 메서드에 할당될 때 런타임에 바인딩됩니다. 자세한 내용은 초기 바인딩 및 지연 바인딩을 참조하세요.

암시적 개체 형식 오류

선언된 변수에 대해 적절한 형식을 유추할 수 없으므로 Object 형식이 유추될 때 암시적 개체 형식 오류가 발생합니다. 이는 주로 Dim 문을 사용하여 As 절을 사용하지 않고 변수를 선언하고 Option Infer 해제된 경우에 발생합니다. 자세한 내용은 Option Infer 문Visual Basic 언어 사양을 참조하세요.

메서드 매개 변수의 경우 절은 해제된 As 경우 Option Strict 선택 사항입니다. 그러나 한 매개 변수가 절을 As 사용하는 경우 모두 절을 사용해야 합니다. 켜 As 진 경우 Option Strict 절은 모든 매개 변수 정의에 필요합니다.

절을 사용하지 않고 변수를 As 선언하고 해당 변수로 Nothing설정하면 변수의 Object형식이 있습니다. 이 경우 컴파일 시간 오류는 켜지고 Option Infer 있을 때 Option Strict 발생하지 않습니다. 이 예제는 .입니다 Dim something = Nothing.

기본 데이터 형식 및 값

다음 표에서는 Dim 문에서 데이터 형식 및 이니셜라이저를 지정하는 다양한 조합의 결과를 설명합니다.

데이터 형식이 지정되었나요? 이니셜라이저가 지정되었나요? 예시 결과
아니오 아니오 Dim qty off(기본값)이면 Option Strict 변수가 .로 Nothing설정됩니다.

이 경우 Option Strict 컴파일 시간 오류가 발생합니다.
아니오 Dim qty = 5 설정(기본값)인 경우 Option Infer 변수는 이니셜라이저의 데이터 형식을 가져옵니다. 로컬 형식 유추를 참조하세요.

꺼져 있고 Option Strict 해제된 경우 Option Infer 변수는 .의 Object데이터 형식을 가져옵니다.

꺼져 있고 Option Strict 켜진 경우 Option Infer 컴파일 시간 오류가 발생합니다.
아니오 Dim qty As Integer 변수는 데이터 형식의 기본값으로 초기화됩니다. 자세한 내용은 Dim 문을 참조하세요.
Dim qty As Integer = 5 이니셜라이저의 데이터 형식을 지정된 데이터 형식으로 변환할 수 없는 경우 컴파일 시간 오류가 발생합니다.

Option Strict 문이 없는 경우

소스 코드에 문이 없 Option Strict 으면 컴파일 페이지, 프로젝트 디자이너(Visual Basic)Option strict 설정이 사용됩니다. 컴파일 페이지에는 오류를 생성하는 조건에 대한 추가 제어를 제공하는 설정이 있습니다.

명령줄 컴파일러를 사용하는 경우 -optionstrict 컴파일러 옵션을 사용하여 설정을 Option Strict지정할 수 있습니다.

IDE에서 Option Strict를 설정하려면

비고

컴퓨터는 다음 지침에서 Visual Studio 사용자 인터페이스 요소 중 일부에 대해 다른 이름 또는 위치를 표시할 수 있습니다. 가지고 있는 Visual Studio 버전과 사용하는 설정에 따라 이러한 요소가 결정됩니다. 자세한 내용은 IDE 개인 설정참조하세요.

  1. 솔루션 탐색기프로젝트를 선택합니다. 프로젝트 메뉴에서 속성을 클릭합니다.

  2. [컴파일] 탭의 [옵션 엄격] 상자에서 값을 설정합니다.

IDE에서 경고 구성을 설정하려면

명령문 대신 프로젝트 디자이너(Visual Basic)Option Strict 컴파일 페이지를 사용하면 오류를 생성하는 조건을 추가로 제어할 수 있습니다. 컴파일 페이지의경고 구성 섹션에는 컴파일 시간 오류가 Option Strict 발생하는 세 가지 조건에 해당하는 설정이 있습니다. 다음 설정은 다음과 같습니다.

  • 암시적 변환

  • 지연 바인딩; 런타임에 호출이 실패할 수

  • 암시적 형식; 개체는 가정

Option Strict 설정하면 이러한 세 가지 경고 구성 설정이 모두 오류 설정됩니다. Option Strictoff설정하면 세 가지 설정이 모두 없음 설정됩니다.

각 경고 구성 설정을 없음, 경고또는 오류변경할 수 있습니다. 세 가지 경고 구성 설정이 모두 오류 설정되면 On 상자에 Option strict 나타납니다. 세 가지 모두 없음 설정되면 이 상자에 Off 나타납니다. 이러한 설정의 다른 조합의 경우 (사용자 지정) 나타납니다.

새 프로젝트에 대한 Option Strict 기본 설정을 설정하려면

프로젝트를 만들면 [컴파일] 탭의 [옵션 엄격] 설정이 [옵션] 대화 상자의 [옵션 엄격] 설정으로 설정됩니다.

이 대화 상자에서 설정 Option Strict 하려면 도구 메뉴에서 옵션을 클릭합니다. 옵션 대화 상자에서 프로젝트 및 솔루션확장한 다음 VB 기본값 클릭합니다. VB 기본값의 초기 기본 설정은 .입니다Off.

명령줄에서 Option Strict를 설정하려면

vbc 명령에 -optionstrict 컴파일러 옵션을 포함합니다.

예제 1

다음 예제에서는 변환 범위를 좁히는 암시적 형식 변환으로 인한 컴파일 시간 오류를 보여 줍니다. 이 오류 범주는 컴파일 페이지의암시적 변환 조건에 해당합니다.

' 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

예제 2

다음 예제에서는 지연 바인딩으로 인한 컴파일 시간 오류를 보여 줍니다. 이 오류 범주는 지연 바인딩에 해당합니다. 컴파일 페이지의런타임 조건에서 호출이 실패할 수 있습니다.

' 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

예제 3

다음 예제에서는 암시적 형식 Object으로 선언된 변수로 인한 오류를 보여 줍니다. 이 오류 범주는 암시적 형식에 해당합니다. 컴파일 페이지에서개체가 가정한 조건입니다.

' 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

참고하십시오