Вложенный класс .GetType () - PullRequest
       5

Вложенный класс .GetType ()

7 голосов
/ 02 февраля 2012

Я заметил кое-что любопытное, когда возился с вложенными классами и выводил имя типа в консольное окно. Мне было интересно, если кто-то может объяснить это немного для меня. При вызове GetType() в главном классе он возвращает то, что я ожидал, это было имя класса после соответствующих пространств имен. т.е. Namespace.Namespace.Classname

Однако, когда я вызываю функцию изнутри включающего класса, чтобы вернуть тип вложенного класса, я получаю значение, возвращаемое как

Namespace.Namespace.ClassNameEnclosing + ClassNameNested.

Почему это не просто возвращается в виде точечной записи. Почему символ +? Мне просто любопытно, что происходит на заднем плане, что вызывает эту запись.

Ответы [ 2 ]

5 голосов
/ 02 февраля 2012

Точки используются для обозначения пространств имен.Вложенный класс все еще находится в том же пространстве имен, он просто вложен в класс.

Я не могу сказать по собственному желанию (из краткого исследования ECMA-335), действительно ли имя неквалифицированного типа, включающее точкубыть действительным в IL;Я подозреваю, что так и будет, но это затруднит чтение всех видов диагностики.

1 голос
/ 02 февраля 2012

Отражение не зависит от языка.

Точечная запись (Namespace.Namespace.OuterClassName.InnerClassName) относится к C #.Reflection должен работать для каждого языка, который вы можете использовать для компиляции в IL.Кроме того, как вы можете быть уверены, когда размышляете, что OuterClassName не просто еще одна часть пространства имен, не изучая другие свойства класса Type?

Вы спрашиваете, почему это не просто возвращается?как точечная нотация?Вы также можете спросить: «Почему это не просто возвращается как нотация IronPython», или нотация IronLisp, или нотация L #, или нотация BOo, или ...

Изучить нотацию, используемую в отражении,используйте его для анализа кода, написанного на любом языке.

...