ฉันรู้isและasสำหรับinstanceofแต่วิธีการสะท้อนแสงisInstance ()ล่ะ?
ฉันรู้isและasสำหรับinstanceofแต่วิธีการสะท้อนแสงisInstance ()ล่ะ?
คำตอบ:
สิ่งที่เทียบเท่ากับ Java obj.getClass().isInstance(otherObj)ใน C # มีดังนี้:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
โปรดทราบว่าในขณะที่ทั้ง Java และ C # ทำงานบนอ็อบเจ็กต์ประเภทรันไทม์ (Java java.lang.Class≣ C # System.Type) ของobj(via .getClass()vs .getType()) Java isInstanceจะใช้อ็อบเจ็กต์เป็นอาร์กิวเมนต์ในขณะที่ C # IsAssignableFromคาดว่าจะมีSystem.Typeอ็อบเจ็กต์อื่น
isต้องการชื่อประเภทตรงกันข้าม นี่คือสิ่งที่อยาก OP: 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)
ดูคำอธิบายType.IsInstanceOfTypeใน MSDN