다음을 통해 공유


Option Infer 문

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

Option Infer { On | Off }

구성 요소

용어

내용

On

선택적 요소로서, 지역 형식 유추를 사용합니다.

Off

선택적 요소로서, 지역 형식 유추를 사용하지 않습니다.

설명

파일에 Option Infer를 설정하려면 파일의 맨 위에 Option Infer On 또는 Option Infer Off를 다른 소스 코드보다 먼저 입력합니다. 파일에서 Option Infer에 대해 설정한 값이 IDE 또는 명령줄에 설정된 값과 충돌하는 경우 파일의 값이 우선 순위를 갖습니다.

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

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

Option Infer가 설정된 경우의 IntelliSense

선언의 IntelliSense 보기

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

Option Infer가 해제된 경우의 IntelliSense

선언의 IntelliSense 보기

변수가 Object로 선언되면 프로그램이 실행되고 있을 때 런타임 형식을 변경할 수 있습니다. Visual Basic은 boxing 및 unboxing이라는 작업을 수행하여 Object와 값 형식 사이를 변환합니다. 이 작업으로 실행이 느려집니다. boxing과 unboxing에 대한 자세한 내용은 Visual Basic 언어 사양을 참조하십시오.

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

자세한 내용은 지역 형식 유추(Visual Basic)을 참조하십시오.

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(기본값)이면 변수의 데이터 형식은 이니셜라이저가 됩니다. 지역 형식 유추(Visual Basic)를 참조하십시오.

Option Infer가 off이고 Option Strict가 off이면 변수의 데이터 형식은 Object가 됩니다.

Option Infer가 Off이고 Option Strict가 On이면 컴파일 타임 오류가 발생합니다.

아니요

Dim qty As Integer

변수가 데이터 형식에 대해 기본 값으로 초기화되었습니다. 자세한 내용은 Dim 문(Visual Basic)을 참조하십시오.

Dim qty As Integer = 5

이니셜라이저의 데이터 형식이 지정된 데이터 형식으로 변환되지 않으면 컴파일 타임 오류가 발생합니다.

예제

다음 예제에서는 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

다음 예제는 변수가 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

참고 항목

참조

Dim 문(Visual Basic)

Option Compare 문

Option Explicit 문(Visual Basic)

Option Strict 문

옵션 대화 상자, 프로젝트, VB 기본값

/optioninfer

개념

지역 형식 유추(Visual Basic)

변경 기록

날짜

변경 내용

이유

2011년 4월

Object 및 형식 유추에 대한 정보가 추가되었습니다.

향상된 기능 관련 정보

2011년 3월

비고를 수정하고 예제를 추가했습니다.

향상된 기능 관련 정보