J'ai un programme qui nécessite des performances rapides. Dans l'une de ses boucles internes, je dois tester le type d'un objet pour voir s'il hérite d'une certaine interface.
Une façon de procéder serait d'utiliser la fonctionnalité de vérification de type intégrée du CLR. La méthode la plus élégante est probablement le mot-clé 'is':
if (obj is ISpecialType)
Une autre approche serait de donner à la classe de base ma propre fonction virtuelle GetType () qui retourne une valeur d'énumération prédéfinie (dans mon cas, en fait, je n'ai besoin que d'un booléen). Cette méthode serait rapide, mais moins élégante.
J'ai entendu dire qu'il existe une instruction IL spécifiquement pour le mot clé «est», mais cela ne signifie pas qu'il s'exécute rapidement lorsqu'il est traduit en assemblage natif. Quelqu'un peut-il partager un aperçu de la performance de «est» par rapport à l'autre méthode?
MISE À JOUR: Merci pour toutes les réponses éclairées! Il semble que quelques points utiles soient répartis entre les réponses: le point d'Andrew sur le fait de «exécuter» automatiquement un casting est essentiel, mais les données de performance recueillies par Binary Worrier et Ian sont également extrêmement utiles. Ce serait formidable si l'une des réponses était modifiée pour inclure toutes ces informations.