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
- 但正如您所说,它们硬编码到Type
etc 类中。
类型与其命名空间之间的分隔符在Type.Delimiter
字段的 BCL 中定义。您将看到反射 API 中使用了此值,并且可以可靠地用于连接类型及其命名空间。