! 0이 MSIL (Microsoft Intermediate Language)의 유형 인 이유는 무엇입니까?
많은 MSIL 목록에서 다음을 관찰했습니다.
System.Nullable`1<!0> etc ...
또는
class !0 etc ...
!0
이러한 상황에서 의 의미는 무엇입니까 ?
이것은 .NET 어셈블리를 보는 데 사용하는 디 컴파일러의 특징입니다. 그것은 ildasm.exe의 동작이며, Reflector 또는 ILSpy와 같은 다른 사람들이이 문제를 해결합니다. 이를 작성한 Microsoft 프로그래머는 바로 가기 를 사용하여 메타 데이터에서 형식 인수 이름을 조회하는 추가 코드를 작성하지 않고 인코딩 된 방식으로 형식 인수를 표시하는 문자열을 IL에서 생성합니다 .
!n
제네릭 유형의 n 번째 유형 인수 로 읽어야 합니다. 여기서! 0은 "첫 번째 유형 인수",! 1은 "두 번째 유형 인수"등을 의미합니다. Nullable <>의 경우 MSDN 기사에서 '! 0'은 'T'를 의미합니다.
또한 !!T
. 두 개의 느낌표는 일반 메서드에 대한 형식 인수를 나타냅니다 . 이번에는 ildasm.exe와는 않습니다 사용하는 대신 형식 인수의 이름을 조회 !!0
. 프로그래머가 제네릭 유형에 대한 지름길을 선택했지만 제네릭 메서드에는 적용하지 않는 이유는 리버스 엔지니어링하기 어렵습니다. Ildasm은 매우 기발한 프로그램이며 .NET의 다른 C ++ 코드와는 매우 다른 C ++ 코딩 스타일로 작성되었습니다. 이것이 인턴의 임무 였을 확률이 0이 아닐 확률이 높습니다. :)
"Nullable"의`1 접미사는 일반 유형 이름에 대한 일반 인코딩이며, 일반 유형에 하나의 유형 인수가 있음을 나타냅니다. 즉, Nullable <>의 경우! 1이 사용되는 것을 볼 수 없습니다.
그래서 단순히 !0
"T"로 읽으십시오 . 또는 더 나은 디 컴파일러를 사용하십시오.
이것은 일반 유형 매개 변수입니다.
그들은 위치 적입니다.
일반 코드를 디 컴파일하여 사용 방법을 확인합니다 (IL과 C # 비교).
참고 URL : https://stackoverflow.com/questions/31559861/why-is-0-a-type-in-microsoft-intermediate-language-msil
'code' 카테고리의 다른 글
chart.js v2로 차트에서 범례 제거 (0) | 2020.09.15 |
---|---|
TypeError : re.findall ()의 바이트 열류 객체에 문자열 패턴을 사용할 수 없습니다. (0) | 2020.09.14 |
CSS 필터 만 사용하여 검은 색을 특정 색상으로 변환하는 방법 (0) | 2020.09.14 |
크로스 플랫폼 모바일 개발에서 어떤 작업이 수행 되었습니까? (0) | 2020.09.14 |
XML 속성 값에서 줄 바꿈이 허용됩니까? (0) | 2020.09.14 |