是否在某处定义了C#名称空间分隔符(。)?

时间:2013-02-14 07:22:09

标签: c# .net system.reflection

C#中的全名分隔符是句点字符(.)。例如System.Console.Write

这是在Path.PathSeperator之类的地方定义的,还是在.NET反射类中也是硬编码的?

(例如Type.FullName实现为Type.Namespace + "." + Type.Name,假设它不会改变?

3 个答案:

答案 0 :(得分:15)

基本上:语言规范。但实际上,Type.FullName使用BCL定义,而不是C#定义 - 有趣的是他们不同意。例如:

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

到C#,ZX.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