У мене є програма, яка вимагає швидкої роботи. В межах одного з його внутрішніх циклів мені потрібно протестувати тип об’єкта, щоб побачити, чи він успадковується від певного інтерфейсу.
Один із способів це зробити - це вбудована функція перевірки типу CLR. Найелегантнішим методом, напевно, є ключове слово 'is':
if (obj is ISpecialType)
Іншим підходом було б надати базовому класу власну віртуальну функцію GetType (), яка повертає заздалегідь визначене значення переліку (у моєму випадку, насправді, мені потрібен лише bool). Цей метод був би швидким, але менш елегантним.
Я чув, що існує інструкція IL спеціально для ключового слова 'is', але це не означає, що вона швидко виконується при перекладі на рідну збірку. Хтось може поділитися деяким уявленням про ефективність "є" проти іншого методу?
ОНОВЛЕННЯ: Дякуємо за всі поінформовані відповіді! Здається, серед відповідей розподілено кілька корисних моментів: Ендрю про те, "чи" це автоматично виконувати акторський склад, є надзвичайно важливим, але дані про ефективність, зібрані Бінарним Вар'єром та Йеном, також надзвичайно корисні. Було б чудово, якби одна з відповідей була відредагована, щоб включити всю цю інформацію.