Vérification de type en C# : typeof, GetType ou is ? Analyse complète

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Vérification de type en C# : typeof, GetType ou is ? Comment ne pas se perdre dans les détails

\n\n

Tout développeur C#, tôt ou tard, se retrouve confronté à la nécessité de vérifier le type d'un objet. Cela semble simple, non ? Mais quand trois options s'offrent à vous — typeof, GetType() et is — les yeux s'écarquillent et une question légitime surgit : "Laquelle choisir ?".

\n\n

Cet article n'est pas un simple extrait de documentation. Nous analyserons chaque approche avec des exemples concrets, identifierons les pièges et donnerons des recommandations claires. Après l'avoir lu, vous ne devinerez plus et saurez exactement quel outil utiliser dans chaque situation. C'est parti !

\n\n

Pourquoi vérifier les types en C# ?

\n\n

Avant de plonger dans les détails, rappelons pourquoi c'est nécessaire. C# est un langage fortement typé, mais cela n'empêche pas les situations où le type d'un objet n'est connu qu'à l'exécution. Voici les scénarios les plus courants :

\n\n
    \n
  • Travail avec des interfaces et des classes de base : Vous recevez un objet en tant que object ou type de base, et vous devez connaître sa "véritable nature".
  • \n
  • Sérialisation et désérialisation : Les données JSON ou XML arrivent sous forme de chaîne, et vous devez restaurer un type spécifique.
  • \n
  • Réflexion (Reflection) : Lorsque vous créez dynamiquement des objets ou appelez des méthodes en ne connaissant que le nom du type.
  • \n
  • Journalisation et débogage : Parfois, il suffit d'afficher dans le journal le type avec lequel vous travaillez actuellement.
  • \n
\n\n

C'est là que nos trois héros entrent en scène. Faisons plus ample connaissance avec chacun.

\n\n

typeof — une vision statique du futur

\n\n

typeof est un opérateur qui retourne un objet System.Type pour un type connu à la compilation. Il fonctionne comme un service de renseignements : "Donne-moi le nom de la classe, et je te fournirai toutes les informations la concernant".

\n\n

Comment ça fonctionne :

\n
Type stringType = typeof(string);\nConsole.WriteLine(stringType.FullName); // Sortie : System.String\n\nType intType = typeof(int);\nConsole.WriteLine(intType.FullName); // Sortie : System.Int32
\n\n

Caractéristique clé : typeof ne nécessite pas d'instance d'objet. C'est une opération statique. Vous dites au compilateur : "J'ai le type MyClass, donne-moi ses métadonnées".

\n\n

Quand l'utiliser :

\n
    \n
  • Lorsque vous avez besoin du type par le nom de la classe, et non par un objet.
  • \n
  • Dans les attributs (par exemple, [AttributeUsage(typeof(MyAttribute))]).
  • \n
  • Dans les génériques : typeof(List<>).
  • \n
\n\n

Piège : typeof retourne toujours le type exact que vous avez spécifié dans le code. Il ne connaît pas l'héritage. Si vous avez class Dog : Animal { }, alors typeof(Animal) ne deviendra jamais typeof(Dog).

\n\n

GetType() — une enquête dynamique

\n\n

Contrairement à typeof, la méthode GetType() est appelée sur une instance d'objet. Elle prend l'objet réel présent en mémoire et dit : "Ah, voilà qui tu es vraiment !".

\n\n

Exemple :

\n
object obj = "Bonjour, le monde !";\nType typeOfObj = obj.GetType();\nConsole.WriteLine(typeOfObj.FullName); // Sortie : System.String\n\n// Et maintenant une astuce :\nobject obj2 = 42;\nType typeOfObj2 = obj2.GetType();\nConsole.WriteLine(typeOfObj2.FullName); // Sortie : System.Int32
\n\n

Remarquez : la variable obj est déclarée comme object, mais GetType() "voit" à travers cette enveloppe et retourne System.String. C'est la détermination dynamique du type.

\n\n

Quand l'utiliser :

\n
    \n
  • Lorsque vous devez connaître le type exact d'un objet à l'exécution.
  • \n
  • Pour comparer des types : obj.GetType() == typeof(MyClass).
  • \n

Blogs

Book Recommendations