2012-02-02 11 views
7

ネストされたクラスを使いこなし、そのタイプの名前をコンソールウィンドウに出力すると、何か不思議に思った。私は誰かが私のためにそれを少し説明できるかどうか疑問に思っていた。メインクラスでGetType()を呼び出すと、それは関連する名前空間の後のクラスの名前であったものを返します。ネストされたクラス.GetType()

Namespace.Namespace.ClassNameEnclosing + ClassNameNested. 

なぜそれが単にドット表記として返されません。しかし、私は値がこのとして返さ私が手に入れ子になったクラスの型を返すように囲んでいるクラスの中から関数を呼び出すとき、すなわちNamespace.Namespace.Classname

。なぜ+記号ですか?私はちょうどこの記法を引き起こすバックグラウンドで起こっていることについて興味があります。

答えて

5

ドットは名前空間を示すために使用されます。ネストされたクラスはまだ同じ名前空間にあり、クラス内にネストされています。

ドットを含む非修飾型の名前が実際にILで有効かどうかはわかりません(ECMA-335の簡単な調査から)。私は容疑者ですが、それはすべての種類の診断を読みにくくするでしょう。

+0

お返事ありがとうございます。クラスはそれ自身のクラスですが、それ自体の名前空間はありません。プラス記号は、基本的には、この型が囲むクラスの名前空間に追加されていると述べていますか? – CSharpened

+0

@CSharpened:はい、そのネームスペースです。たとえば、 'System.Collections.Generic.SortedDictionary .ValueCollection'の名前空間を見れば、それはちょうど' System.Collections.Generic'であることがわかります。 –

+0

素晴らしい返信です。ありがとう。それはそれを非常に明確にします。 – CSharpened

1

反射は言語固有ではありません。

ドット表記(Namespace.Namespace.OuterClassName.InnerClassName)はC#固有のものです。リフレクションは、ILにコンパイルするために使用できるすべての言語で機能する必要があります。さらに、OuterClassNameTypeクラスの他のプロパティを調べることなく名前空間の一部ではないことを、どのように反映させることができますか?

なぜ簡単ではないのですが、ドット表記法で返されますか?あなたはIronPythonの記法として単純に返されないのはなぜですか?IronLisp表記法、L#表記法、Boo表記法、または...

リフレクションで使用される表記を学び、それを使うことができます任意の言語で書かれたコードを分析する。