以下代碼片段是否等效?是「is」運算符,只是「IsInstanceOfType」方法的語法糖
class a
{}
class b:a
{}
b foo=new b();
//這裏談到
foo is a
//...is一樣......
typeof(a).isinstanceoftype(foo)
或者其他類型的方法也許一個映射接近是運營商。 例如「IsAssignableFrom」或「IsSubclassOf」
以下代碼片段是否等效?是「is」運算符,只是「IsInstanceOfType」方法的語法糖
class a
{}
class b:a
{}
b foo=new b();
//這裏談到
foo is a
//...is一樣......
typeof(a).isinstanceoftype(foo)
或者其他類型的方法也許一個映射接近是運營商。 例如「IsAssignableFrom」或「IsSubclassOf」
不,不是。事實上,如果您仔細查看IsInstanceOfType
,您會看到第一個代碼行實際上使用is
執行比較,如果情況如此,那麼實際上會導致StackOverflowException
。
is
運算符導致IL代碼中的isinst
操作。
它似乎使得在.Net 4.0中IsInstanceOfType的實現變得簡單得多。它基本上只是委託給IsAssignableFrom。 – rudimenter 2010-09-06 11:38:17
它不是,因爲is
容忍在左側的空引用。
這不一樣is
被翻譯成isinst操作碼,而IsInstanceOf
是Type
上的正常虛擬呼叫。
相關:http://stackoverflow.com/questions/2251310/why-is-is-implemented-as-as – 2010-09-05 20:11:51