2010-09-05 3 views
5

Les extraits de code suivants sont-ils équivalents?est l'opérateur "is" juste sucre syntaxique pour la méthode "IsInstanceOfType"

class a 
{} 

class b:a 
{} 

b foo=new b(); 

// ici il vient

foo is a 

//...is les mêmes que ...

typeof(a).isinstanceoftype(foo) 

Ou peut-être l'une des autres méthodes de type Carte plus proche de la est opérateur. par exemple. "IsAssignableFrom" ou "IsSubclassOf"

+0

Connexes: http://stackoverflow.com/questions/2251310/why-is-is-implemented-as-as –

Répondre

3

Non, ce n'est pas le cas. En fait, si vous jetez un coup d'oeil dans IsInstanceOfType vous verrez que la toute première ligne de code effectue réellement une comparaison en utilisant is, ce qui conduirait effectivement à un StackOverflowException si tel était le cas.

L'opérateur is conduit à une opération isinst dans le code IL.

+0

Il semble que l'implémentation de IsInstanceOfType soit beaucoup plus simple dans .Net 4.0. Il délègue simplement à IsAssignableFrom. – rudimenter

6

Ce n'est pas le cas, car is est tolérant à la référence null sur le côté gauche.

4

Ce n'est pas la même chose que is est traduit dans l'opcode isinst alors que IsInstanceOf est un appel virtuel normal sur Type.

Questions connexes