Подтвердить что ты не робот

Определяется ли где-нибудь разделитель пространства имен С# (.)?

Полное имя разделителя в С# является символом периода (.). например System.Console.Write.

Определяется ли это где-то вроде Path.PathSeperator, или же он жестко закодирован в классах отражения .NET?

(например, Type.FullName реализован как Type.Namespace + "." + Type.Name, предполагая, что он не изменится?

4b9b3361

Ответ 1

В основном: спецификация языка. Но на самом деле Type.FullName использует определения BCL, а не определения С# - и интересно, что они не согласны. Например:

namespace X {
    public class Y {
        public class Z {}
    }
}

В С#, Z есть X.Y.Z; для BCL это X.Y+Z. Также меняется представление дженериков - с BCL с использованием back-ticks и цифр, а не angular скобок. Я полагаю, что BCL использует формат CLI типов (который имеет отдельную спецификацию), но если вы думаете об этом: это не требуется для этого (за исключением во время отражения-излучения).

AFAIK, эти разделители не отображаются через что-либо вроде Path.PathSeparator - но, как вы говорите, жестко закодированы в Type и т.д. классы.

Ответ 2

Разделитель между типом и его пространством имен определяется в BCL в поле Type.Delimiter. Вы увидите это значение, используемое в API Reflection, и его можно надежно использовать для конкатенации типа и пространства имен.

Ответ 3

В соответствии с тем, что оно использовалось в исходных источниках, @Paul Type.Delimiter является ответом на ваш основной вопрос, но ответ на ваш например да, '.', а также '+', как указано в ответе @Marc, жестко закодированный.