मुझे पता है 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 विवरण देखें ।