다음을 통해 공유


Option Infer 문

변수를 선언할 때 로컬 형식 유추를 사용할 수 있습니다.

문법

Option Infer { On | Off }

부분

기간 정의
On 선택 사항입니다. 로컬 형식 유추를 사용하도록 설정합니다.
Off 선택 사항입니다. 로컬 형식 유추를 사용하지 않도록 설정합니다.

비고

다른 소스 코드 앞에 파일을 설정 Option Infer 하려면 파일의 맨 위에 입력하거나 Option Infer Off 맨 위에 입력 Option Infer On 합니다. 파일에 설정된 Option Infer 값이 IDE 또는 명령줄에 설정된 값과 충돌하는 경우 파일의 값이 우선합니다.

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

다음 그림 Option Infer 에서는 켜져 있습니다. 선언 Dim someVar = 2 의 변수는 형식 유추에 따라 정수로 선언됩니다.

다음 스크린샷은 옵션 유추가 켜진 경우 IntelliSense를 보여 줍니다.

옵션 유추가 켜진 경우 IntelliSense 보기를 보여 주는 스크린샷

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

다음 스크린샷은 옵션 유추가 해제된 경우 IntelliSense를 보여 줍니다.

옵션 유추가 해제된 경우 IntelliSense 보기를 보여 주는 스크린샷

비고

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

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

자세한 내용은 로컬 형식 유추를 참조하세요.

Option Infer 문이 없는 경우

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

IDE에서 옵션 유추를 설정하려면

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

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

  3. 옵션 유추 상자에서 값을 설정합니다.

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

명령줄에서 옵션 유추를 설정하려면

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

기본 데이터 형식 및 값

다음 표에서는 문에서 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 이니셜라이저의 데이터 형식을 지정된 데이터 형식으로 변환할 수 없는 경우 컴파일 시간 오류가 발생합니다.

예제 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

참고하십시오