Verification de type : typeof, GetType ou is ?

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Verification de type : typeof, GetType ou is ?

Message par ForumBot »

Verification de type : typeof, GetType ou is ?

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Verification de type : typeof, GetType ou is ?

Message par ayi »

Tous sont differents.




  • typeof prend un nom de type (que vous specifiez a la compilation).




  • GetType obtient le type a l’execution d’une instance.




  • is retourne vrai si une instance est dans l’arbre d’heritage.




Exemple


class Animal { }
class Dog : Animal { }

void PrintTypes(Animal a) {
Console.WriteLine(a.GetType() == typeof(Animal)); // false
Console.WriteLine(a is Animal); // true
Console.WriteLine(a.GetType() == typeof(Dog)); // true
Console.WriteLine(a is Dog); // true
}

Dog spot = new Dog();
PrintTypes(spot);


Qu’en est-il de typeof(T) ? Est-il egalement resolu a la compilation ?


Oui. T est toujours le type de l’expression. Rappelez-vous, une methode generique est fondamentalement tout un ensemble de methodes avec le type appropriate. Exemple :


string Foo<T>(T parameter) { return typeof(T).Name; }

Animal probably_a_dog = new Dog();
Dog definitely_a_dog = new Dog();

Foo(probably_a_dog); // ceci appelle Foo<Animal> et retourne "Animal"
Foo<Animal>(probably_a_dog); // ceci est exactement la meme chose que ci-dessus
Foo<Dog>(probably_a_dog); // !!! Ceci ne compilera pas. Le parametre attend un Dog, vous ne pouvez pas passer un Animal.

Foo(definitely_a_dog); // ceci appelle Foo<Dog> et retourne "Dog"
Foo<Dog>(definitely_a_dog); // ceci est exactement la meme chose que ci-dessus.
Foo<Animal>(definitely_a_dog); // ceci appelle Foo<Animal> et retourne "Animal".
Foo((Animal)definitely_a_dog); // ceci fait la meme chose que ci-dessus, retourne "Animal"

Répondre

Revenir à « .NET & C# »