14

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

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

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

4

3 回答 3

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- 但正如您所说,它们硬编码到Typeetc 类中。

于 2013-02-14T07:27:00.447 回答
6

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

于 2013-10-03T18:21:33.233 回答
2

根据在参考资料中的使用位置,@Paul'sType.Delimiter是您主要问题的答案,但您的 eg 的答案是 yes,'.'以及'+'@Marc 的答案中提到的 ,是硬编码的。

于 2016-09-05T07:57:27.853 回答