Tôi có một chương trình yêu cầu hiệu suất nhanh. Trong một trong các vòng lặp bên trong của nó, tôi cần kiểm tra kiểu của một đối tượng để xem liệu nó có kế thừa từ một giao diện nhất định hay không.
Một cách để làm điều này là sử dụng chức năng kiểm tra kiểu tích hợp của CLR. Phương pháp thanh lịch nhất có lẽ là từ khóa 'là':
if (obj is ISpecialType)
Một cách tiếp cận khác là cung cấp cho lớp cơ sở hàm GetType () ảo của riêng tôi, hàm này trả về một giá trị enum được xác định trước (trong trường hợp của tôi, thực sự, tôi chỉ cần bool). Phương pháp đó sẽ nhanh chóng, nhưng kém thanh lịch hơn.
Tôi đã nghe nói rằng có một hướng dẫn IL dành riêng cho từ khóa 'is', nhưng điều đó không có nghĩa là nó thực thi nhanh khi được dịch sang hợp ngữ gốc. Bất cứ ai có thể chia sẻ một số thông tin chi tiết về hiệu suất của 'is' so với phương pháp khác?
CẬP NHẬT: Cảm ơn vì tất cả các câu trả lời đầy đủ thông tin! Có vẻ như một số điểm hữu ích được lan truyền trong số các câu trả lời: Quan điểm của Andrew về việc 'tự động thực hiện một diễn viên là điều cần thiết, nhưng dữ liệu hiệu suất được thu thập bởi Binary Worrier và Ian cũng cực kỳ hữu ích. Sẽ thật tuyệt nếu một trong những câu trả lời được chỉnh sửa để bao gồm tất cả thông tin này.