42 votes

Quelle est la difference entre typeof et the is keyword?

Quelle est la différence exacte entre les deux?

 // When calling this method with GetByType<MyClass>()

public bool GetByType<T>() {
    // this returns true:
    return typeof(T).Equals(typeof(MyClass));

    // this returns false:
    return typeof(T) is MyClass;
}
 

59voto

gsharp Points 4704

Vous devez utiliser is AClass sur les instances et ne pas comparer les types:

 var myInstance = new AClass();
var isit = myInstance is AClass; //true
 

is fonctionne aussi avec les classes de base et les interfaces:

 MemoryStream stream = new MemoryStream();

bool isStream = stream is Stream; //true
bool isIDispo = stream is IDisposable; //true
 

33voto

Jens Points 14829

Le mot clé is vérifie si un objet est d'un certain type. typeof(T) est du type Type , et non du type AClass .

Vérifiez le MSDN pour le mot clé is et le mot clé typeof

25voto

Javad_Amiry Points 9003

typeof(T) renvoie une instance Type . et le Type n'est jamais égal à AClass

 var t1 = typeof(AClass)); // t1 is a "Type" object

var t2 = new AClass(); // t2 is a "AClass" object

t2 is AClass; // true
t1 is AClass; // false, because of t1 is a "Type" instance, not a "AClass" instance
 

11voto

Hasan Khan Points 20723
  • typeof (T) retourne un objet Type
  • Le type n'est pas AClass et ne peut jamais l'être car le type ne dérive pas de AClass

votre première déclaration est juste

10voto

Joey Points 1150

typeof renvoie un objet Type décrivant T qui n'est pas de type AClass où les is retourne false.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X