Option Infer 문

변수를 선언할 때 지역 형식 유추를 사용하도록 설정합니다.

구문

Option Infer { On | Off }

부분

용어 정의
On 선택 사항. 지역 형식 유추를 사용하도록 설정합니다.
Off 선택 사항. 지역 형식 유추를 사용하지 않도록 설정합니다.

설명

파일에서 Option Infer를 설정하려면 파일 맨 위(기타 모든 소스 코드 앞)에 Option Infer On 또는 Option Infer Off를 입력합니다. 파일에서 Option Infer에 대해 설정된 값이 IDE 또는 명령줄에 설정된 값과 충돌하는 경우에는 파일의 값이 우선적으로 적용됩니다.

Option InferOn으로 설정하면 데이터 형식을 명시적으로 설명하지 않고 로컬 변수를 선언할 수 있습니다. 컴파일러는 초기화 식의 형식에서 변수의 데이터 형식을 유추합니다.

다음 그림에서는 Option Infer가 설정되어 있습니다. Dim someVar = 2 선언의 변수는 형식 유추에 의해 정수로 선언됩니다.

다음 스크린샷은 Option Infer가 설정된 경우 IntelliSense를 보여 줍니다.

Screenshot showing IntelliSense view when Option Infer is on.

다음 그림에서는 Option Infer가 해제되어 있습니다. Dim someVar = 2 선언의 변수는 형식 유추에 의해 Object로 선언됩니다. 이 예제에서는 Option Strict 설정이 컴파일 페이지, 프로젝트 디자이너(Visual Basic)에서 끄기로 설정됩니다.

다음 스크린샷은 Option Infer가 해제된 경우 IntelliSense를 보여 줍니다.

Screenshot showing IntelliSense view when Option Infer is off.

참고 항목

변수가 Object로 선언되면 프로그램을 실행하는 동안 런타임 형식이 변경될 수 있습니다. Visual Basic은 boxingunboxing이 호출된 작업을 수행하여 Object 값 형식 간에 변환하므로 실행 속도가 느려집니다. boxing 및 unboxing에 대한 자세한 내용은 Visual Basic 언어 사양을 참조하세요.

형식 유추는 프로시저 수준에서 적용되며 클래스, 구조체, 모듈 또는 인터페이스의 프로시저 외부에는 적용되지 않습니다.

자세한 내용은 지역 형식 유추(local type inference)를 참조하세요.

Option Infer 문이 없는 경우

소스 코드에 Option Infer 문이 없으면 컴파일 페이지, 프로젝트 디자이너(Visual Basic)에서 Option Infer 설정이 사용됩니다. 명령줄 컴파일러를 사용하는 경우 -optioninfer 컴파일러 옵션이 사용됩니다.

IDE에서 Option Infer를 설정하려면

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

  2. 컴파일 탭을 클릭합니다.

  3. Option Infer 상자에 값을 설정합니다.

새 프로젝트를 만들 때 컴파일 탭의 Option Infer 설정이 VB 기본값 대화 상자의 Option Infer 설정으로 설정됩니다. VB 기본값 대화 상자에 액세스하려면 도구 메뉴에서 옵션을 클릭합니다. 옵션 대화 상자에서 프로젝트 및 솔루션을 확장하고 VB 기본값을 클릭합니다. VB 기본값의 초기 기본 설정은 On입니다.

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

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

기본 데이터 형식 및 값

다음 테이블에는 Dim 문에서 데이터 형식과 이니셜라이저를 지정하는 다양한 조합의 결과에 대한 설명이 나와 있습니다.

데이터 형식 지정 여부 이니셜라이저 지정 여부 예제 결과
아니요 아니요 Dim qty Option Strict가 off(기본값)이면 변수는 Nothing으로 설정됩니다.

Option Strict가 on이면 컴파일 시간 오류가 발생합니다.
Dim qty = 5 Option Infer가 on(기본값)이면 변수가 이니셜라이저의 데이터 형식을 사용합니다. 지역 형식 유추를 참조하세요.

Option Infer가 off이고 Option Strict고 off이면 변수가 Object의 데이터 형식을 사용합니다.

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

예 1

다음 예제에서는 Option Infer 문이 지역 형식 유추를 사용하도록 설정하는 방법을 보여 줍니다.

' Enable Option Infer before trying these examples.

' Variable num is an Integer.
Dim num = 5

' Variable dbl is a Double.
Dim dbl = 4.113

' Variable str is a String.
Dim str = "abc"

' Variable pList is an array of Process objects.
Dim pList = Process.GetProcesses()

' Variable i is an Integer.
For i = 1 To 10
    Console.WriteLine(i)
Next

' Variable item is a string.
Dim lst As New List(Of String) From {"abc", "def", "ghi"}

For Each item In lst
    Console.WriteLine(item)
Next

' Variable namedCust is an instance of the Customer class.
Dim namedCust = New Customer With {.Name = "Blue Yonder Airlines",
                                   .City = "Snoqualmie"}

' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}

' If customers is a collection of Customer objects in the following 
' query, the inferred type of cust is Customer, and the inferred type
' of custs is IEnumerable(Of Customer).
Dim custs = From cust In customers 
            Where cust.City = "Seattle" 
            Select cust.Name, cust.ID

예제 2

다음 예제에서는 변수가 Object로 식별되는 경우 런타임 형식이 달라질 수 있음을 보여 줍니다.

' Disable Option Infer when trying this example.

Dim someVar = 5
Console.WriteLine(someVar.GetType.ToString)

' If Option Infer is instead enabled, the following
' statement causes a run-time error. This is because
' someVar was implicitly defined as an integer.
someVar = "abc"
Console.WriteLine(someVar.GetType.ToString)

' Output:
'  System.Int32
'  System.String

참고 항목