मुझे पता है is
और के as
लिए instanceof
, लेकिन चिंतनशील isInstance () विधि के बारे में क्या ?
मुझे पता है is
और के as
लिए instanceof
, लेकिन चिंतनशील isInstance () विधि के बारे में क्या ?
जवाबों:
जावा के obj.getClass().isInstance(otherObj)
C # के बराबर इस प्रकार है:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
ध्यान दें कि जब जावा और सी # दोनों रन टाइम टाइप ऑब्जेक्ट (जावा java.lang.Class
बनाम सी System.Type
) पर obj
( .getClass()
बनाम के माध्यम से .getType()
) काम करते हैं, तो जावा isInstance
एक ऑब्जेक्ट को अपने तर्क के रूप में लेता है, जबकि सी # IsAssignableFrom
किसी अन्य System.Type
ऑब्जेक्ट की अपेक्षा करता है।
is
इसके विपरीत, एक प्रकार का नाम आवश्यक है। यह वही है जो ओपी चाहता था: जावा के बराबर isInstance
। अपवित्रों की हास्यास्पद संख्या के बावजूद अन्य उत्तर गलत है।
bool result = (obj is MyClass); // Better than using 'as'
new Child() is Parent
)
निर्भर करता है, is
अगर आप कलाकारों के परिणाम का उपयोग नहीं करना चाहते हैं और as
यदि आप करते हैं तो उपयोग करें। आप शायद ही कभी लिखना चाहते हैं:
if(foo is Bar) {
return (Bar)foo;
}
के बजाय:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
मेरे सिर के ऊपर से बस, आप भी कर सकते हैं:
bool result = ((obj as MyClass) != null)
निश्चित नहीं है कि कौन बेहतर प्रदर्शन करेगा। मैं इसे बेंचमार्क करने के लिए किसी और को छोड़ दूँगा :)
नीचे दिया गया कोड वैकल्पिक हो सकता है IsAssignableFrom
।
parentObject.GetType().IsInstanceOfType(inheritedObject)
MSDN में Type.IsInstanceOfType विवरण देखें ।