C#中的全名分隔符是句点字符(.
)。例如System.Console.Write
。
这是在Path.PathSeperator
之类的地方定义的,还是在.NET反射类中也是硬编码的?
(例如Type.FullName
实现为Type.Namespace + "." + Type.Name
,假设它不会改变?
答案 0 :(得分:15)
基本上:语言规范。但实际上,Type.FullName
使用BCL定义,而不是C#定义 - 有趣的是他们不同意。例如:
namespace X {
public class Y {
public class Z {}
}
}
到C#,Z
是X.Y.Z
;对于BCL,它是X.Y+Z
。泛型的表示也发生了变化 - BCL使用后标记和数字而不是尖括号。我相信 BCL使用CLI的类型格式(它有一个单独的规范),但是如果你考虑它:它不需要这样做(除了在反射 - 发射期间)。
AFAIK,这些分隔符不会通过Path.PathSeparator
之类的任何内容公开 - 但正如您所说,它是硬编码到Type
等类中的。
答案 1 :(得分:5)
类型及其命名空间之间的分隔符在Type.Delimiter
字段的BCL中定义。您将在Reflection API中看到此值,并且可以可靠地用于连接类型及其名称空间。
答案 2 :(得分:1)
根据参考来源中it's used的位置,@ Paul的Type.Delimiter
是您主要问题的答案,但是答案可能是您的问题。是的,'.'
以及'+'
,正如@ Marc的回答中提到的那样,是hard coded。