Saya tahu isdan asuntuk instanceof, tapi bagaimana dengan metode isInstance () reflektif ?
Saya tahu isdan asuntuk instanceof, tapi bagaimana dengan metode isInstance () reflektif ?
Jawaban:
Setara dengan Java obj.getClass().isInstance(otherObj)di C # adalah sebagai berikut:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
Perhatikan bahwa meskipun Java dan C # bekerja pada objek tipe runtime (Java java.lang.Class≣ C # System.Type) dari sebuah obj(via .getClass()vs .getType()), Java isInstancemenggunakan objek sebagai argumennya, sedangkan C # IsAssignableFrommengharapkan System.Typeobjek lain .
isSebaliknya, diperlukan nama tipe. Inilah yang diinginkan OP: setara dengan Java isInstance. Jawaban lainnya salah meskipun jumlah upvote yang konyol.
bool result = (obj is MyClass); // Better than using 'as'
new Child() is Parent)
Tergantung, gunakan isjika Anda tidak ingin menggunakan hasil gips dan gunakan asjika Anda melakukannya. Anda hampir tidak pernah ingin menulis:
if(foo is Bar) {
return (Bar)foo;
}
Dari pada:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
di luar kepala saya, Anda juga bisa melakukan:
bool result = ((obj as MyClass) != null)
Tidak yakin mana yang berkinerja lebih baik. Saya akan menyerahkannya kepada orang lain untuk melakukan benchmark :)
Kode di bawah ini bisa menjadi alternatif IsAssignableFrom.
parentObject.GetType().IsInstanceOfType(inheritedObject)
Lihat Deskripsi Type.IsInstanceOfType di MSDN.