code

! 0이 MSIL (Microsoft Intermediate Language)의 유형 인 이유는 무엇입니까?

codestyles 2020. 9. 14. 20:58
반응형

! 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

반응형