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

Ahm*_*gle 13 .net c# system.reflection

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

这是在某个地方定义的Path.PathSeperator,还是在.NET反射类中进行了硬编码?

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

Mar*_*ell 15

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

namespace X {
    public class Y {
        public class Z {}
    }
}
Run Code Online (Sandbox Code Playgroud)

对C#来说,ZX.Y.Z; 它是BCL X.Y+Z.泛型的表示也发生了变化 - BCL使用后标记和数字而不是尖括号.我相信 BCL使用CLI的类型格式(它有一个单独的规范),但是如果你想一想:它不需要这样做(除了在反射 - 发射期间).

AFAIK,这些分隔符不是通过任何类似的暴露Path.PathSeparator- 但正如你所说,硬编码到Typeetc类中.


Pau*_*ner 5

类型及其命名空间之间的分隔符在Type.Delimiter字段的BCL中定义.您将看到Reflection API中使用的此值,可以可靠地用于连接类型及其名称空间.