2013-02-14 11 views

答えて

15

を基本的に想定しType.Namespace + "." + Type.Nameとして実装されています。言語仕様をしかし実際に、Type.FullNameはBCLの定義ではなく、C#の定義を使用しています - 彼らはを同意し、興味深いことにを?。。たとえば、次のC#、Z

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

X.Y.ZあるBCLにはX.Y+Zあるジェネリックの表現があまりにも変化 - BCLバック-Tを使用して。角括弧ではなく数字と数字を使用します。 I BCLはCLIの書式形式(別仕様)を使用しますが、考慮する場合は必須ではありません(リフレクションエミット時を除く)。

AFAIKでは、これらの区切り文字はPath.PathSeparatorのようなものでは公開されませんが、あなたの言うとおり、Typeなどのクラスにハードコードされています。

+0

私は 'X.Y + Z'記法は匿名型やスタックトレースで見ることができると思います...? –

+0

@ThorstenDittmarはC#の面では、匿名の型*名前を持っていない*。コンパイラは、C#では '<> _ 4'(など)のようなものは不正な名前を生成します。おそらく '.GetType()'を介してBCL名を見れば、匿名型の表記しか見えませんが、それは 'X.Y + Z'のような普通の型を見ても変わりません。スタックトレースに関して:はい、それは型の内部表現を使用します:それは再びコンパイラがその時点で実行されているわけではないので、C#の用語は当てはまりません。同様に、 'int'は通常' System.Int32'などです。 –

5

タイプとそのネームスペースの間の区切り文字は、​​フィールドのBCLで定義されています。この値はReflection APIで使用され、確実にタイプとその名前空間を連結するために使用できます。

1

参考資料のit's usedによると、@ PaulのType.Delimiterはあなたの主な質問に対する答えですが、あなたの回答には答えがあります。 @マークの答えに記載されているように、'.''+'hard codedです。

関連する問題