C#のフルネーム区切り記号は、ピリオド文字(.
)です。例えばSystem.Console.Write
。C#名前空間セパレータ(。)はどこかで定義されていますか?
これはPath.PathSeperator
のように定義されていますか、.NETのリフレクションクラスでもハードコードされていますか?
(例えばType.FullName
が、それは変更されないこと
C#のフルネーム区切り記号は、ピリオド文字(.
)です。例えばSystem.Console.Write
。C#名前空間セパレータ(。)はどこかで定義されていますか?
これはPath.PathSeperator
のように定義されていますか、.NETのリフレクションクラスでもハードコードされていますか?
(例えばType.FullName
が、それは変更されないこと
を基本的に想定し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
などのクラスにハードコードされています。
タイプとそのネームスペースの間の区切り文字は、フィールドのBCLで定義されています。この値はReflection APIで使用され、確実にタイプとその名前空間を連結するために使用できます。
参考資料のit's usedによると、@ PaulのType.Delimiter
はあなたの主な質問に対する答えですが、あなたの回答には答えがあります。 @マークの答えに記載されているように、'.'
と'+'
はhard codedです。
私は 'X.Y + Z'記法は匿名型やスタックトレースで見ることができると思います...? –
@ThorstenDittmarはC#の面では、匿名の型*名前を持っていない*。コンパイラは、C#では '<> _ 4'(など)のようなものは不正な名前を生成します。おそらく '.GetType()'を介してBCL名を見れば、匿名型の表記しか見えませんが、それは 'X.Y + Z'のような普通の型を見ても変わりません。スタックトレースに関して:はい、それは型の内部表現を使用します:それは再びコンパイラがその時点で実行されているわけではないので、C#の用語は当てはまりません。同様に、 'int'は通常' System.Int32'などです。 –