2012-02-02 4 views
7

중첩 된 클래스를 둘러보고 해당 유형의 이름을 콘솔 창에 출력 할 때 궁금한 점이 있습니다. 나는 누군가가 나를 위해 그것을 약간 설명 할 수 있는지 궁금해하고 있었다. 기본 클래스에서 GetType()을 호출하면 예상되는 결과를 반환합니다.이 이름은 관련 네임 스페이스 뒤에있는 클래스의 이름입니다.중첩 클래스 .GetType()

Namespace.Namespace.ClassNameEnclosing + ClassNameNested. 

이유는 단순히 점 표기법으로 반환되지 않습니다 : 내가 중첩 된 클래스의 유형을 반환 둘러싸는 클래스 내에서 함수를 호출 할 때 즉 Namespace.Namespace.Classname

는 그러나, 나는 값이 반환받을 . 왜 + 기호인가? 나는이 표기법을 유발하는 배경에서 진행되고있는 일에 대해서 궁금해합니다.

답변

5

점은 이름 공간을 나타내는 데 사용됩니다. 중첩 된 클래스는 여전히 동일한 네임 스페이스에 있으며 클래스 내에 중첩되어 있습니다.

점을 포함하는 규정되지 않은 유형 이름이 실제로 IL에서 유효한지 여부는 알 수 없습니다 (ECMA-335의 간단한 연구에서). I 용의가이지만 모든 종류의 진단을 읽기가 어려울 것입니다.

+0

응답 해 주셔서 감사합니다. 클래스가 자체적으로 클래스이지만 자체 네임 스페이스가 없다는 것을 알 수 있습니까? 더하기 기호는 기본적으로이 유형이 둘러싼 클래스의 네임 스페이스에 추가 된 것이라고 말합니다. – CSharpened

+0

@CSharpened : 네, 그 네임 스페이스입니다. (System.Collections.Generic.SortedDictionary .ValueCollection'의 네임 스페이스를 보면 'System.Collections.Generic'이라는 것을 알 수 있습니다. –

+0

우수 답변입니다. 감사. 그것은 그것을 아주 분명하게 만듭니다. – CSharpened

1

반사 언어가 특정 아닙니다.

점 표기법 (Namespace.Namespace.OuterClassName.InnerClassName)은 C#에만 해당됩니다. 리플렉션은 IL에 컴파일 할 때 사용할 수있는 모든 언어에 대해 작동해야합니다. 게다가 OuterClassNameType 클래스의 다른 속성을 검사하지 않고 네임 스페이스의 다른 부분이 아니라는 것을 어떻게 확인할 수 있습니까?

당신은 도트 표기법으로 돌려 보내지 않은 이유는 무엇입니까? IronPython 표기법, IronLisp 표기법 또는 L # 표기법 또는 BOo 표기법으로 반환되는 이유는 무엇입니까?

리플렉션에 사용 된 표기법을 배우고 사용할 수 있습니다. 모든 언어로 작성된 코드를 분석합니다.