C# 中的全名分隔符是句点字符 ( .)。例如System.Console.Write。
这是在某个地方定义的Path.PathSeperator,还是在 .NET 反射类中硬编码?
(例如被Type.FullName实施为Type.Namespace + "." + Type.Name假设它不会改变?
C# 中的全名分隔符是句点字符 ( .)。例如System.Console.Write。
这是在某个地方定义的Path.PathSeperator,还是在 .NET 反射类中硬编码?
(例如被Type.FullName实施为Type.Namespace + "." + Type.Name假设它不会改变?
基本上:语言规范。但实际上,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- 但正如您所说,它们硬编码到Typeetc 类中。
类型与其命名空间之间的分隔符在Type.Delimiter字段的 BCL 中定义。您将看到反射 API 中使用了此值,并且可以可靠地用于连接类型及其命名空间。