2010-09-05 26 views
5

以下代碼片段是否等效?是「is」運算符,只是「IsInstanceOfType」方法的語法糖

class a 
{} 

class b:a 
{} 

b foo=new b(); 

//這裏談到

foo is a 

//...is一樣......

typeof(a).isinstanceoftype(foo) 

或者其他類型的方法也許一個映射接近是運營商。 例如「IsAssignableFrom」或「IsSubclassOf」

+0

相關:http://stackoverflow.com/questions/2251310/why-is-is-implemented-as-as – 2010-09-05 20:11:51

回答

3

不,不是。事實上,如果您仔細查看IsInstanceOfType,您會看到第一個代碼行實際上使用is執行比較,如果情況如此,那麼實際上會導致StackOverflowException

is運算符導致IL代碼中的isinst操作。

+0

它似乎使得在.Net 4.0中IsInstanceOfType的實現變得簡單得多。它基本上只是委託給IsAssignableFrom。 – rudimenter 2010-09-06 11:38:17

6

它不是,因爲is容忍在左側的空引用。

4

這不一樣is被翻譯成isinst操作碼,而IsInstanceOfType上的正常虛擬呼叫。