어떻게 그러한 함수를 만들 수 있습니까? (프레임 워크는 Chr을 위해 어떻게합니까?) 또는 프레임 워크에서 가능한 이유는 무엇입니까? 대부분의 경우에 대한 해결 방법은 뭔가처럼Const from 함수
Public Const Magic As String = "Magic" ' ok
Public Const lcMagic As String = Magic.ToLower ' not ok - wanted to avoiding potential bugs if Magic is ever changed.
Public Const Magic2 As String = functionGeneratingLongButStaticString()
입니다 :
''' <summary>Carriage Return \r 13 0xD</summary>
Public Const Cr As Char = ChrW(&HD)
''' <summary>Line Feed \n 10 0xA</summary>
Public Const Lf As Char = ChrW(&HA)
은 그래서 유사한 기능의 예를 생성 할 수 있어야한다 : consts의
예는 함수에서 선언
''' <summary>Lowercase value of Magic</summary>
Public Shared ReadOnly lcMagic As String = Magic.ToLower
그러나 이것은 실제 값에 대한 인텔리 센스를 제공하지 않습니다.
이후로 "안전"하지 않음 it is possible to modify ReadOnly fields with reflection
그래서 'const 함수'를 선언 할 수있는 방법이 있습니까? 그렇지 않다면 프레임 워크가 실제로 어떻게합니까?
편집 :
.field public static literal char Cr = char('\r')
는 컴파일러 특별한 경우이다 의미 생성 된 IL를 검사하였습니다.
const는 함수 또는 표현식의 결과 일 수 없습니다. 컴파일 결과를 할당하려고 할 때 컴파일 타임에 알 필요가 있습니다. – Plutonix
문서를보십시오 : [이니셜 라이저에서는 변수 나 함수를 사용할 수 없습니다. 그러나 CByte 및 CShort와 같은 전환 키워드를 사용할 수 있습니다. 상수 String 또는 Char 인수로 호출하면 AscW를 사용할 수도 있습니다. 컴파일 타임에 평가할 수 있으므로 AscW를 사용할 수 있습니다.] (http://msdn.microsoft.com/en-us/library/cyxe49xw.aspx). –
예.이 모든 것은 컴파일 시간 평가에 관한 것입니다. 그래서'Chr' (0-127에만 해당)은'Asc'와 그 친구들을 컴파일 타임에 호출 할 수 있고'Const'로 사용할 수 있습니다. 'Const Cr As Char = ChrW (& HD)'가 작동하고'ChrW'가 함수이기 때문에 (http://referencesource.microsoft.com/Microsoft.VisualBasic/R/6283a83f3afbfba9.html) "const가 결과가 될 수 없습니다 함수 또는 표현의 "는 사실이 아닙니다. 따라서 질문은 여전히 남아 있습니다. 이러한 기능의이면에있는 마법은 무엇이며, 왜 이러한 "컴파일 기능"을 만들 수 없습니까? – NiKiZe