14

C#のフルネーム区切り文字はピリオド文字(.)です。例:System.Console.Write

これはのような場所で定義されていますかPath.PathSeperator、それとも.NETリフレクションクラスでもハードコーディングされていますか?

(例えば、それが変わらないと仮定してType.FullName実装されていますか?Type.Namespace + "." + Type.Name

4

3 に答える 3

15

基本的に:言語仕様。しかし実際にType.FullNameは、C#定義ではなく、BCL定義を使用しています。興味深いことに、それらは同意しません。例えば:

namespace X {
    public class Y {
        public class Z {}
    }
}

C#にZX.Y.Z、; BCLにとってはX.Y+Zです。ジェネリックスの表現も変更されます。BCLでは、角かっこではなくバックティックと数字を使用します。BCLはCLIのタイプの形式(別の仕様があります)を使用していると思いますが、考えてみれば、そうする必要はありません(リフレクションエミット中を除く)。

AFAIK、これらのセパレーターは-のようなものを介して公開されていませんが、あなたが言うように、 etcクラスPath.PathSeparatorにハードコードされています。Type

于 2013-02-14T07:27:00.447 に答える
6

タイプとその名前空間の間の区切り文字は、Type.DelimiterフィールドのBCLで定義されます。この値はReflectionAPIで使用されており、型とその名前空間を連結するために確実に使用できます。

于 2013-10-03T18:21:33.233 に答える
2

参照ソースで使用されている場所によると、@ PaulType.Delimiterは主な質問に対する答えですが、たとえば、@ Marcの答えで述べたように、答えはyesで'.'あり、ハードコードされています。'+'

于 2016-09-05T07:57:27.853 に答える