2010-03-19 14 views
5

Alles über Type ist in der Natur reflektierend. Liegt es daran, dass Type häufiger als der Rest der Klassen in System.Reflection verwendet wird? Oder weil es mehr wie eine Systemklasse als eine Reflexionsklasse funktioniert?Warum ist die Type-Klasse im System.Reflection-Namespace nicht vorhanden?

Kurz gesagt, ich habe mich immer gefragt, was die Motivation hinter dem Standort System.Type war.

+0

Es könnte sein, weil es der Mechanismus der Reflexion ist. Es ist wie deine Augen. Du wirst deine Augen nie wirklich sehen. Sie werden bestenfalls das Spiegelbild Ihrer Augen sehen. –

+0

Sicher, die Augen sind ein Mechanismus, um die eigene Reflexion zu sehen. Obwohl der Kommentar nur die Frage verstärkt. Da Sie Ihre eigenen Augen nicht direkt sehen können (d. H. Nicht direkt Typinfo sehen können), benötigen Sie eine Art von Reflexion, um irgendwelche Informationen zu erhalten (d. H. "Typ"). – Joe

Antwort

1

Die Klasse Type wird an vielen anderen Stellen verwendet, nicht nur bei System.Reflection. Eine schnelle Suche mit Reflector zeigt Hunderte von ihnen. Dies ist wichtig in System.Configuration, System.Data, System.Drawing, System.Linq, System.Windows.Forms usw. Die Art, wie die Type-Instanz in diesen Klassen tatsächlich verwendet wird, ist nicht sichtbar. Es ist wahrscheinlich, dass System.Reflection verwendet wird, aber das ist ein Implementierungsdetail, das das Programm in keiner Weise beeinflusst.

Da das Erstellen der Type-Instanz, die diese Klassen benötigen, mit dem Operator typeof und object.GetType trivial ist und Sie System.Reflection nie verwenden müssen, wenn Sie tatsächlich Reflektionscode schreiben, verdient Typ sicherlich einen leicht zugänglichen Ort in der Systemnamespace

1

Eine Baugruppe hat Typen und Assembly liegt auf System.Reflection, die neugierig ist.

Also meine Vermutung wäre, dass es etwas mit Object zu tun hat, das die Methode GetType, die eine Type zurückgibt, implementiert.

+1

Übrigens, 'Object.getClass' in Java ist parallel dazu. –

+0

Sollte sich 'MemberInfo' nach derselben Logik nicht auch im' System'-Namespace befinden? 'Type' implementiert' GetMember() ', was eine' MemberInfo' zurückgibt. Vorwärtsreferenzierung von Namespaces findet überall in der BCL statt. – Joe

+0

@Arc, tatsächlich, aber der Anwendungsfall 'Object.GetType()' wird viel häufiger verwendet als 'Object.GetType(). GetMember()'. –

0

Ich denke, es ist, weil Objekt als GetType-Methode.

MS-Codierung Üben sagen, dass eine Klasse nicht auf einen Typ in einem Subnamespace verweisen sollte. In der Praxis verstößt der BCL häufig gegen diese Regel: o)