Спасибо за ответ. Я изначально думал что при is берутся GetType() от обоих операндов объектов и проверяются типы через Type.IsAssignableFrom, и если возвращается true то происходит приведения объекта. Получается is работает гораздо быстрее чем то что я описал ?