2010-09-05 17 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 –

उत्तर

3

नहीं, यह नहीं है। वास्तव में, यदि आप IsInstanceOfType में देख रहे हैं तो आप देखेंगे कि पहली कोड लाइन वास्तव में is का उपयोग करके तुलना करती है, जो प्रभावी रूप से StackOverflowException का कारण बनती है।

is ऑपरेटर आईएल कोड में isinst ऑपरेशन की ओर जाता है।

+0

ऐसा लगता है कि IsInstanceOfType के कार्यान्वयन को नेट 4.0 में बहुत आसान मिला है। यह मूल रूप से केवल IsAssignableFrom के लिए प्रतिनिधि है। – rudimenter

6

ऐसा नहीं है, क्योंकि is बाईं तरफ शून्य संदर्भ के लिए सहिष्णु है।

4

यह is रूप में एक ही isinst opcode में अनुवाद नहीं हुआ है है जबकि IsInstanceOfType पर एक सामान्य आभासी कॉल है।