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
は、C#定義ではなく、BCL定義を使用しています。興味深いことに、それらは同意しません。例えば:
namespace X {
public class Y {
public class Z {}
}
}
C#にZ
はX.Y.Z
、; BCLにとってはX.Y+Z
です。ジェネリックスの表現も変更されます。BCLでは、角かっこではなくバックティックと数字を使用します。BCLはCLIのタイプの形式(別の仕様があります)を使用していると思いますが、考えてみれば、そうする必要はありません(リフレクションエミット中を除く)。
AFAIK、これらのセパレーターは-のようなものを介して公開されていませんが、あなたが言うように、 etcクラスPath.PathSeparator
にハードコードされています。Type
タイプとその名前空間の間の区切り文字は、Type.Delimiter
フィールドのBCLで定義されます。この値はReflectionAPIで使用されており、型とその名前空間を連結するために確実に使用できます。