Tôi biết về is
và as
cho instanceof
, nhưng phương pháp phản chiếu isInstance() là gì?C# tương đương với isInstance của Java() là gì?
Trả lời
Tương đương Java obj.getClass().isInstance(otherObj)
trong C# như sau:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
Lưu ý rằng trong khi cả Java và C# làm việc trên các loại runtime đối tượng (Java java.lang.Class
≣ C# System.Type
) của một obj
(thông qua .getClass()
vs .getType()
), isInstance
của Java lấy đối tượng làm đối số của nó, trong khi đối tượng IsAssignableFrom
của C# mong đợi một đối tượng System.Type
khác.
chỉ ra khỏi đỉnh đầu của tôi, bạn cũng có thể làm:
bool result = ((obj as MyClass) != null)
Không chắc mà sẽ thực hiện tốt hơn. Tôi sẽ để lại nó lên cho người khác để chuẩn :)
bool result = (obj is MyClass); // Better than using 'as'
Nó có hoạt động ngay cả đối với các lớp sử dụng thừa kế không? ('new Child() là Parent') –
có nó, chính xác như thế nào bạn hiển thị trên –
thử nghiệm ở đây, nó hoạt động cho các lớp học mà người dùng thừa kế. Cảm ơn người đàn ông. –
Phụ thuộc, sử dụng is
nếu bạn không muốn sử dụng kết quả của các diễn viên và sử dụng as
nếu bạn làm. Bạn hầu như không bao giờ muốn viết:
if(foo is Bar) {
return (Bar)foo;
}
Thay vì:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
Dưới mã có thể được thay thế cho IsAssignableFrom
.
parentObject.GetType().IsInstanceOfType(inheritedObject)
Xem Type.IsInstanceOfType mô tả trong MSDN.
- 1. Tương đương issubclass của isinstance trong python là gì?
- 2. Tương đương C# của Java DecimalFormat là gì?
- 3. Tương đương với lớp Java BigDecimal trong C# là gì?
- 4. Tương đương với C# của java.util.regex là gì?
- 5. Tương đương với LinkedHashSet (Java) trong C# là gì?
- 6. tương đương C# tĩnh của {...} trong Java là gì?
- 7. C# tương đương với dynamic_cast của C++ là gì?
- 8. Tương đương C# của MsgWaitForMultipleObjects là gì?
- 9. Scala tương đương với ClassName.class của Java là gì?
- 10. Scala tương đương với khối tĩnh của Java là gì?
- 11. Tương đương với Ruby cho StringReader của Java là gì?
- 12. Tương đương java với String.fromCharCode của javascript là gì?
- 13. Tương đương với System.out.println() của Java trong Javascript là gì?
- 14. C# tương đương với charAt của Java()?
- 15. Tương đương với C++ của UINT32_MAX là gì?
- 16. Tương đương với JavaScript của C# Server.URLEncode là gì?
- 17. C# tương đương với "self ::" của PHP là gì?
- 18. Tương đương .NET của NumberFormatException của Java là gì?
- 19. JVM tương đương trong C# là gì?
- 20. Tương đương Java cho mã C# sau là gì?
- 21. Tương đương với mới/xóa C++ trong C là gì?
- 22. C tương đương với câu lệnh cin C++ là gì?
- 23. Tương đương với Math.abs() trong Mục tiêu-C là gì?
- 24. Tương đương VB.NET của từ khóa C# "là" là gì?
- 25. Tương đương với C# /. NET của BufferedInputStream (bằng Java) là gì?
- 26. Java tương đương với PHP var_dump là gì?
- 27. Tương đương C++ của hàm băm_hmac của PHP là gì?
- 28. Java tương đương với preg_replace này là gì?
- 29. Tương đương java của AggregateException từ .net là gì?
- 30. Clojure tương đương với Overriding "bằng" trong java là gì?
Lưu ý IsAssignableFrom lấy một loại, không phải là một đối tượng, vì vậy bạn cần phải thực sự làm OtherObj.getType(). – FlySwat
Cảm ơn Jon - và hãy nhớ, đây là một wiki! Tôi không oán trách mọi người sửa lỗi của mình. –
thú vị ... trong java, JVM xử lý "instanceof" đặc biệt, dường như nó rất nhanh, có thể giải thích tại sao một từ khóa bất thường của nó (cũng có một phương thức isAssignable trong java). –