ฉันรู้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