Visual Basic .NET Language
옵션 추론
수색…
이게 뭐야?
변수를 선언 할 때 로컬 형식 유추를 사용할 수 있습니다.
타입 유추 란 무엇입니까?
명시 적으로 데이터 유형을 언급하지 않고 지역 변수를 선언 할 수 있습니다. 컴파일러는 변수의 데이터 형식을 초기화 식의 형식에서 유추합니다.
Option Infer On :
Dim aString = "1234" '--> Will be treated as String by the compiler
Dim aNumber = 4711 '--> Will be treated as Integer by the compiler
명시 적 유형 선언과 비교 :
'State a type explicitly
Dim aString as String = "1234"
Dim aNumber as Integer = 4711
Option Infer Off :
Option Infer Off
사용하는 컴파일러 동작은 이미 여기 에 설명 된 Option Strict
설정에 따라 다릅니다.
Option Infer Off - 옵션 Strict Off
명시 적 타입 선언이없는 모든 변수는Object
로 선언됩니다.Dim aString = "1234" '--> Will be treated as Object by the compiler
Option Infer Off - 옵션 Strict On
컴파일러는 명시 적 유형이없는 변수를 선언 할 수 없습니다.'Dim aString = "1234" '--> Will not compile due to missing type in declaration
사용 / 사용 중지 방법
문서 수준
기본적으로 켜져 있지만 코드 파일 맨 위에 Option Infer On|Off
를 설정하여 설정할 수 있습니다. 이 옵션은 전체 문서에 적용됩니다.
프로젝트 수준
Visual Studio의 메뉴를 통해이 기능을 켜거나 끌 수 있습니다.
프로젝트> [프로젝트] 속성> 컴파일 탭> 옵션 추론
드롭 다운 메뉴에서 On|Off
를 선택하십시오. 이 옵션은 전체 문서에 적용됩니다.
모든 새 프로젝트
다음을 선택하여 모든 새 프로젝트에 기본적으로 켤 수 있습니다.
도구> 옵션> 프로젝트 및 솔루션> VB 기본값> Option Infer
드롭 다운 메뉴에서 On|Off
를 선택하십시오.
형식 유추를 사용해야하는 경우
가능하다면 기본적으로 타입 유추를 사용할 수 있습니다.
그러나 Option Infer Off
와 Option Strict Off
조합 할 때주의해야합니다. 이렇게하면 바람직하지 않은 런타임 동작이 발생할 수 있습니다.
Dim someVar = 5
someVar.GetType.ToString() '--> System.Int32
someVar = "abc"
someVar.GetType.ToString() '--> System.String
익명 유형
익명 형식은 Option Infer On
만 선언 할 수 있습니다.
LINQ를 다룰 때 자주 사용됩니다.
Dim countryCodes = New List(Of String)
countryCodes.Add("en-US")
countryCodes.Add("en-GB")
countryCodes.Add("de-DE")
countryCodes.Add("de-AT")
Dim q = From code In countryCodes
Let split = code.Split("-"c)
Select New With {.Language = split(0), .Country = split(1)}
Option Infer Off
컴파일러에서 오류를 throw하거나 (Option Strict On
)
또는q
를 유형object
(Option Strict Off
)로 간주object
.
두 경우 모두 익명 형식을 사용할 수없는 결과가 생성됩니다.
복식 / 소수 자릿수
소수 자릿수가있는 숫자 변수는 기본적으로 Double
로 유추됩니다.
Dim aNumber = 44.11 '--> Will be treated as type `Double` by the compiler
Decimal
과 같은 다른 유형이 필요한 경우 변수를 초기화 한 값을 표시해야합니다.
Dim mDecimal = 47.11D '--> Will be treated as type `Decimal` by the compiler