Сколько стоит «как» по сравнению с QueryInterface в COM или dynamic_cast в C ++?
-
10-07-2019 - |
Вопрос
Я все еще пытаюсь сопоставить свои глубокие и старые знания из C / C ++ с моими более поверхностными знаниями .Net. Сегодня пришло время «как» (и неявно "является" и приведен) в C #.
Моя ментальная модель " как " является то, что это QueryInterface
или dynamic_cast
( dynamic_cast
с аргументом указателя, а не ссылкой, то есть) для C #. У меня вопрос двоякий:
QueryInterface
или dynamic_cast
? Решение
Да, сравнение справедливо, особенно когда дело касается указателей. Каждое из трех либо успешно выполняется и возвращает ненулевой указатель целевого типа, либо возвращает нулевое значение.
Вы можете фактически использовать оператор as
при работе с COM-объектами в .NET, что делает его эквивалентным QueryInterface
с небольшим объемом служебных данных для управляемого / COM взаимодействие. Внутри CLR (приведение между управляемыми типами) оператор as
является чрезвычайно легковесным по сравнению с QueryInterface
в COM или dynamic_cast код> в C ++. Для всех мест в моем коде, где у меня было использовать динамическое приведение по какой-то причине, я никогда не видел, чтобы оператор
as
показывал даже один пример в профилировании - и учитывая, что я поддерживать реализацию динамически типизированного языка с привязкой к среде выполнения (StringTemplate), я предполагаю, что это что-то значит. :) Р>