Определяется ли где-нибудь разделитель пространства имен С# (.)?
Полное имя разделителя в С# является символом периода (.
). например System.Console.Write
.
Определяется ли это где-то вроде Path.PathSeperator
, или же он жестко закодирован в классах отражения .NET?
(например, Type.FullName
реализован как Type.Namespace + "." + Type.Name
, предполагая, что он не изменится?
Ответы
Ответ 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, жестко закодированный.