2010-09-05 2 views
5

Sind die folgenden Code-Schnipsel gleichwertig?ist der Operator "ist" nur syntaktische Zucker für die "IsInstanceOfType" -Methode

class a 
{} 

class b:a 
{} 

b foo=new b(); 

// hier kommt es

foo is a 

//...is das gleiche wie ...

typeof(a).isinstanceoftype(foo) 

Oder vielleicht eine der anderen Art Methods Karte näher an die ist Betreiber. z.B. "IsAssignableFrom" oder "IsSubclassOf"

+0

In Verbindung stehend: http://StackOverflow.com/Questions/2251310/why-is-isimplemented-as-as –

Antwort

3

Nein, ist es nicht. In der Tat, wenn Sie in IsInstanceOfType schauen, werden Sie sehen, dass die erste Codezeile tatsächlich einen Vergleich unter Verwendung is führt, die effektiv zu einem StackOverflowException führen würde, wenn das der Fall wäre.

Der Operator is führt zu einem isinst-Vorgang im IL-Code.

+0

es scheint, damit die Implementierung von IsInstanceOfType in .Net 4.0 viel einfacher wurde. Es delegiert im Grunde nur an IsAssignableFrom. – rudimenter

6

Es ist nicht, weil is auf Null-Referenz auf der linken Seite tolerant ist.

4

Es ist nicht das gleiche wie is in den Opcode isinst übersetzt während IsInstanceOf eine normale virtuelle Call auf Type ist.

Verwandte Themen