J'ai trois classes: Lorsque j'appelle gettype () à partir de classa code>, classb code>, classc code>. p>
classc code> étend classb code> qui s'étend à son tour classa code>. p>
CLASSA code> S.-Net renvoie classc code> S. Je suis déconcerté parce que cela se passe dans le code qui travaille depuis un moment et que je n'ai pas touché depuis un moment. Y avait-il un correctif à .Net qui a changé le comportement de gettype ()? Je doute que. Ma seule autre pensée est que cela a quelque chose à voir avec Xunit, le cadre de test que j'utilise? P>
4 Réponses :
Cela se comporte exactement comme il est censé. gettype () code> renvoie le type réel de l'instance de l'objet, même s'il s'agit d'une sous-classe (et il a toujours em> se comportait de cette façon). typeof (classa) code> d'autre part vous donnerait toujours le type de classa code>. p>
Bizarre ... Je ne sais pas comment mes tests d'unité auraient passé. Quoi qu'il en soit, il semble que je devais utiliser typeof ()
Si j'ai bien compris votre problème, vous avez un type Quelque part dans le code, vous avez une initialisation comme suit: p>
Considérant que classa A code> et en l'appelant, vous obtenez classc code>. Si tel est le cas, il n'est probablement pas un em> clasa code> objet, mais c'est quelque chose comme ceci: p>
CLASSA A = New ClassC () Code>. p>
classc: classb code> et classb: classa code> vous peut em> faire cela. p>
gettype () code> renvoie un type d'objet réel em> et non type d'emballage. p>
Autant que je me souvienne, GetType () a toujours renvoyé le type de l'instance, pas la classe de base, quel que soit son endroit où il s'appelle. P>
La fonction Si vous voulez voir le type déclaré de la méthode, utilisez l'une des informations suivantes P> gettype code> se comporte comme prévu. Il devrait toujours retourner le type d'exécution réel de la valeur. Je ne crois pas que les patchs chauds ont changé ce comportement, mais le comportement que vous voyez maintenant est définitivement correct. typeof(TheContainingType)
MethodBase.GetCurrentMethod().DeclaringType
Tous - merci! Tout le monde semble dire la même chose ... que cela fonctionne comme prévu et que cela a toujours.