2010-03-19 8 views
5

Tout sur Type est de nature réfléchissante. Est-ce parce que Type est utilisé plus souvent que le reste des classes dans System.Reflection? Ou parce que cela fonctionne plus comme une classe système qu'une classe de réflexion?Pourquoi la classe Type n'est pas dans l'espace de noms System.Reflection?

En bref, je me suis toujours demandé quelle était la motivation derrière l'emplacement de System.Type.

+0

Cela pourrait être parce que c'est le mécanisme de la réflexion. C'est comme tes yeux. Vous ne verrez jamais vos yeux. Au mieux, tu verras le reflet de tes yeux. –

+0

Bien sûr, les yeux sont un mécanisme pour voir son propre reflet. Bien que le commentaire ne fait que renforcer la question. Puisque vous ne pouvez pas voir directement vos propres yeux (c'est-à-dire que vous ne pouvez pas voir directement les informations de type), vous avez besoin d'une sorte de réflexion pour obtenir des informations (par exemple 'Type'). – Joe

Répondre

1

La classe Type est utilisée dans beaucoup plus d'endroits, pas seulement System.Reflection. Une recherche rapide avec Reflector en révèle des centaines. Il est crucial dans System.Configuration, System.Data, System.Drawing, System.Linq, System.Windows.Forms, etc. La façon dont l'instance Type est réellement utilisée dans ces classes n'est pas visible. Il est probable que System.Reflection soit utilisé mais que ce détail d'implémentation n'affecte en rien le programme. Étant donné que la création de l'instance Type dont ces classes ont besoin est triviale avec l'opérateur typeof et object.GetType et que vous ne devez jamais utiliser System.Reflection à moins d'écrire du code de réflexion, Type mérite certainement un emplacement facilement accessible dans le Espace de noms système.

1

Un assemblage a des types et Assembly se trouve sur System.Reflection ce qui est curieux.

Donc, je suppose qu'il a quelque chose à voir avec Object l'implémentation de la méthode GetType qui renvoie un Type.

+1

Incidemment, 'Object.getClass' en Java est similaire à cela. –

+0

Même si, par la même logique, 'MemberInfo' ne devrait pas être dans l'espace de noms' System'? 'Type' implémente' GetMember() 'qui renvoie un' MemberInfo'. Le référencement des espaces de noms se fait partout dans la BCL. – Joe

+0

@Arc, en effet, mais le cas d'utilisation 'Object.GetType()' est beaucoup plus fréquemment utilisé que 'Object.GetType(). GetMember()'. –

0

Je suppose que c'est parce que l'objet en tant que méthode GetType.

La pratique du codage MS indique qu'une classe ne doit pas référencer un type dans un sous-espace de noms. En pratique, le BCL enfreint cette règle assez souvent o)