Visual Basic 컴파일러는 형식 유추 를 사용하여 As
이 없이 선언된 지역 변수의 데이터 형식을 결정합니다. 컴파일러는 초기화 식의 형식에서 변수의 형식을 유추합니다. 이렇게 하면 다음 예제와 같이 형식을 명시적으로 명시하지 않고 변수를 선언할 수 있습니다. 선언의 결과로 둘 다 num1
num2
정수로 강력하게 형식화됩니다.
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
가 꺼져 있을 때 Object
는 Option Strict
로 분류됩니다. 마찬가지로 로컬 형식 유추는 로 선언된 Static
프로시저 수준 변수에는 적용되지 않습니다.
형식 유추 및 지연 바인딩
형식 유추를 사용하는 코드는 런타임에 바인딩을 사용하는 코드와 유사합니다. 그러나 형 추론은 변수를 Object
로 두지 않고 강력하게 형식화합니다. 컴파일러는 변수의 이니셜라이저를 사용하여 컴파일 시간에 변수의 형식을 결정하여 초기 바인딩된 코드를 생성합니다. 이전 예제에서는 num2
가 num1
처럼 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
가 정수 배열이기 때문에 Integer
를 someNumbers2
로 유추합니다.
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)를 참조하세요.
참고하십시오
.NET