Сколько стоит «как» по сравнению с QueryInterface в COM или dynamic_cast в C ++?

StackOverflow https://stackoverflow.com/questions/1818666

Вопрос

Я все еще пытаюсь сопоставить свои глубокие и старые знания из 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), я предполагаю, что это что-то значит. :)

  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top