다음을 통해 공유


로컬 형식 유추(Visual Basic)

Visual Basic 컴파일러는 형식 유추 를 사용하여 As이 없이 선언된 지역 변수의 데이터 형식을 결정합니다. 컴파일러는 초기화 식의 형식에서 변수의 형식을 유추합니다. 이렇게 하면 다음 예제와 같이 형식을 명시적으로 명시하지 않고 변수를 선언할 수 있습니다. 선언의 결과로 둘 다 num1num2 정수로 강력하게 형식화됩니다.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub

비고

이전 예제에서 num2이(가) Integer으로(로) 입력되지 않도록 하려면 Dim num3 As Object = 3이나(나) Dim num4 As Double = 3와 같은 선언을 사용하여 다른 유형을 지정할 수 있습니다.

비고

형식 유추는 비정적 지역 변수에만 사용할 수 있습니다. 클래스 필드, 속성 또는 함수의 형식을 결정하는 데 사용할 수 없습니다.

로컬 형식 유추는 프로시저 수준에서 적용됩니다. 모듈 수준에서 변수를 선언하는 데 사용할 수 없습니다(클래스, 구조체, 모듈 또는 인터페이스 내에서는 프로시저 또는 블록 내에 있지 않음). 이전 예제에서 num2가 프로시저의 지역 변수가 아닌 클래스의 필드였다면, Option Strict가 켜져 있을 때 선언에서 오류를 일으켰을 것이고, num2가 꺼져 있을 때 ObjectOption Strict로 분류됩니다. 마찬가지로 로컬 형식 유추는 로 선언된 Static프로시저 수준 변수에는 적용되지 않습니다.

형식 유추 및 지연 바인딩

형식 유추를 사용하는 코드는 런타임에 바인딩을 사용하는 코드와 유사합니다. 그러나 형 추론은 변수를 Object로 두지 않고 강력하게 형식화합니다. 컴파일러는 변수의 이니셜라이저를 사용하여 컴파일 시간에 변수의 형식을 결정하여 초기 바인딩된 코드를 생성합니다. 이전 예제에서는 num2num1처럼 Integer로 입력됩니다.

초기 바인딩된 변수의 동작은 형식이 런타임에서만 알려지는 지연 바인딩된 변수의 동작과 다릅니다. 형식을 조기에 알면 컴파일러가 실행 전에 문제를 식별하고, 메모리를 정확하게 할당하고, 다른 최적화를 수행할 수 있습니다. 또한 초기 바인딩을 사용하면 Visual Basic IDE(통합 개발 환경)에서 개체의 멤버에 대한 IntelliSense 도움말을 제공할 수 있습니다. 성능에도 초기 바인딩이 선호됩니다. 런타임에 바인딩된 변수에 저장된 모든 데이터를 형식 Object으로 래핑해야 하고 런타임에 형식의 멤버에 액세스하면 프로그램이 느려지기 때문입니다.

예시

형식 유추는 지역 변수가 절 없이 As 선언되고 초기화될 때 발생합니다. 컴파일러는 할당된 초기 값의 형식을 변수의 형식으로 사용합니다. 예를 들어 다음 코드 줄 각각은 형식 String의 변수를 선언합니다.

' Using explicit typing.
Dim name1 As String = "Springfield"

' Using local type inference.
Dim name2 = "Springfield"

다음 코드는 정수 배열을 만드는 두 가지 동등한 방법을 보여 줍니다.

' Using explicit typing.
Dim someNumbers1() As Integer = New Integer() {4, 18, 11, 9, 8, 0, 5}

' Using local type inference.
Dim someNumbers2 = New Integer() {4, 18, 11, 9, 8, 0, 5}

형식 유추를 사용하여 루프 제어 변수의 형식을 결정하는 것이 편리합니다. 다음 코드에서 컴파일러는 이전 예제에서 number가 정수 배열이기 때문에 IntegersomeNumbers2로 유추합니다.

Dim total = 0
For Each number In someNumbers2
    total += number
Next

다음 예제와 같이 문에서 Using 로컬 형식 유추를 사용하여 리소스 이름의 형식을 설정할 수 있습니다.

Using proc = New System.Diagnostics.Process
    ' Insert code to work with the resource.
End Using

다음 예제와 같이 변수의 형식을 함수의 반환 값에서 유추할 수도 있습니다. pList1 프로세스 배열을 반환하기 때문에 pList2 둘 다 Process.GetProcesses 프로세스의 배열입니다.

' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()

' Using local type inference.
Dim pList2 = Process.GetProcesses()

옵션 인퍼

Option Infer 를 사용하면 특정 파일에서 로컬 형식 유추가 허용되는지 여부를 지정할 수 있습니다. 옵션을 사용하거나 차단하려면 파일 시작 부분에 다음 문 중 하나를 입력합니다.

Option Infer On

Option Infer Off

코드에서 값을 Option Infer 지정하지 않으면 컴파일러 기본값은 .입니다 Option Infer On.

파일에 설정된 Option Infer 값이 IDE 또는 명령줄에 설정된 값과 충돌하는 경우 파일의 값이 우선합니다.

자세한 내용은 Option Infer 문컴파일 페이지, 프로젝트 디자이너(Visual Basic)를 참조하세요.

참고하십시오