그리고 진짜 형식을 보여주지 않는 이유는 무엇입니까 (예 : List 0121 대신 List < 문자열 >)?
이 이상한 (나에게) 표기법은 어디서 비롯된 것입니까?런타임에서 GenericType이 "GenericType`n"으로 표시되는 이유는 무엇입니까?
답변
`1은 일반 유형의 MSIL 구문입니다. List<T>
은 C# 고유입니다. 더 MSIL 예 :
List<T> == System.Collections.Generic.List`1
List<string> == System.Collections.Generic.List`1[System.String]
Dictionary<string, int> ==
System.Collections.Generic.Dictionary`2[System.String, System.Int32]
하나 개의 형식 매개 변수와 일반 List<T>
의 CLR 이름은
System.Collections.Generic.List`1
List<T>
이 유형을 명명의 C#을 스타일입니다.
표기법은 매개 변수 개수에 따라 제네릭 형식을 오버로드하는 기능을 제공하기 위해 정의 된 규칙입니다. 유형 매개 변수가 두 개 (예 : List<T,U>
) 인 List
클래스를 선언하면 컴파일러에서 올바른 매개 변수를 선택할 수 있습니다. 이름이됩니다 :
System.Collections.Generic.List`2
과 제네릭이 아닌 List
클래스는 지정됩니다 : CLR을하지 이 일반적인 유형처럼 익명을 요구하지
System.Collections.Generic.List
하는 것으로. 컴파일러가 올바른 유형을 고를 수있는 규칙 일뿐입니다.
가 나는 CLI는 일반적인 유형을 삭제하지 않았다 생각? 그렇지 않은 경우 "List
'List
CLR이 필요로하지 않는 점은 +1입니다. –
C# 종속 구문이기 때문에 List<string>
이 표시되지 않습니다. .Net 소스 코드의 List는 List<string>
, List(Of String)
또는 MSIL로 컴파일 할 수있는 다른 60 가지 이상의 언어/구문으로 선언 될 수 있습니다.
그래서 보시다시피 더 일반적인 MSIL 구문입니다.
`1은 하나의 일반 매개 변수를 가진 목록임을 의미합니다.
- 1. 런타임에서 창 크기가 커지는 이유는 무엇입니까?
- 2. 여기에 tempspace가 표시되는 이유는 무엇입니까?
- 3. XElement Value 속성이 \ r \ n에서 \ n으로 변경되는 이유는 무엇입니까?
- 4. 잘못된 클래스 경로입니까? NoClassDefFoundError가 표시되는 이유는 무엇입니까?
- 5. IE7에서 롤오버에 스크롤 막대가 표시되는 이유는 무엇입니까?
- 6. POST 요청 후 페이지가 표시되는 이유는 무엇입니까?
- 7. "ExecuteNonQuery"에서 "Non"로 표시되는 이유는 무엇입니까?
- 8. 출력 결과에 null이 표시되는 이유는 무엇입니까?
- 9. Quartz 호가 직선보다 두껍게 표시되는 이유는 무엇입니까?
- 10. PHP에서 MySQL 날짜가 공백으로 표시되는 이유는 무엇입니까?
- 11. Android에서 특정 코드가 경고로 표시되는 이유는 무엇입니까?
- 12. 콘솔에 이상한 문자가 표시되는 이유는 무엇입니까?
- 13. 내 UIMenuItems가 UIMenuController의 'more'섹션에 표시되는 이유는 무엇입니까?
- 14. 인접 목록에 중복 모서리가 표시되는 이유는 무엇입니까?
- 15. "정의되지 않은 메소드"가 표시되는 이유는 무엇입니까?
- 16. 텍스트가 계속 강조 표시되는 이유는 무엇입니까?
- 17. NetBeans에서 잘못된 자동 완성이 표시되는 이유는 무엇입니까?
- 18. fabric을 사용할 때 프롬프트가 표시되는 이유는 무엇입니까?
- 19. 런타임에서 내 어셈블리 종속성을 자동으로 해결하지 않는 이유는 무엇입니까?
- 20. PHP : \ r \ n을 \ n으로 바꾸어도 괜찮습니까?
- 21. 런타임에서 HeapDumpOnOutOfMemoryError를
- 22. 런타임에서 컨트롤
- 23. Default.png에서 상태 표시 줄이 계속 표시되는 이유는 무엇입니까?
- 24. Perl에서 "익명의 해시로 된"홀수 개의 요소가 표시되는 이유는 무엇입니까?
- 25. XAML TabControl의 탭 콘텐츠 영역에 탭 머리글이 표시되는 이유는 무엇입니까?
- 26. 내 https 주소로 다른 웹 사이트가 표시되는 이유는 무엇입니까?
- 27. 진행률 막대에 부동 소수점 값이 표시되는 이유는 무엇입니까?
- 28. 내 하이퍼 링크 태그가 브라우저에 일반 텍스트로 표시되는 이유는 무엇입니까?
- 29. javascript DOM에서 nodeName이 때때로 모두 대문자로 표시되는 이유는 무엇입니까?
- 30. 내 경고가 두 번 표시되는 이유는 무엇입니까? 내 응용 프로그램에서
나는 그 점을 놓친 것 같아. \'1은 CLR을위한 일반적인 클래스를 정의하지 않습니다. IL 레벨에서, 일반 클래스는 임의로 명명 될 수 있습니다. 상위 수준 언어에 대한 오버로드 된 제네릭 형식 간의 모호성을 해결하는 방법입니다. 유형에 대한 유형 매개 변수의 수를 선언하여 유형을 일반 매개 변수의 수로 오버로드 할 수 있습니다. 당신의 본보기가 잘못되었습니다. 'Dictionary'은 Dictionary \'2 [System.String, System.Int32]가 아닌 Dictionary \'1입니다. –
와일드 카드, 오타. 결정된. – thecoop