2009-11-30 6 views
6

todavía estoy tratando de trazar mi conocimiento profundo y antiguo de C/C++, que yo sepa .Net algo más profundo. Hoy ha llegado el momento de "como" (e implícitamente "es" y echado) en C#.¿Cuál es el costo de "como" en comparación con QueryInterface de COM o moldeado dinámico en C++?

Mi modelo mental de "como" es que es un QueryInterface o dynamic_cast (un dynamic_cast con el argumento de puntero, no de referencia, es decir) para C#. Mi pregunta es doble:

  1. ¿Es justa mi comparación?
  2. ¿Cuál es el costo relativo de "como" en comparación con QueryInterface o dynamic_cast?

Respuesta

4
  1. Sí, la comparación es justa, sobre todo cuando se trata de punteros. Cada uno de los tres o bien tiene éxito y devuelve un puntero no nulo del tipo de destino, o devuelve null.

  2. En realidad, puede utilizar el operador as al trabajar con objetos COM en .NET, por lo que es equivalente a QueryInterface con una pequeña cantidad de sobrecarga para la interoperabilidad administrada/COM. Dentro del CLR (conversión entre tipos administrados), el operador as es extremadamente liviano en comparación con QueryInterface en COM o dynamic_cast en C++. Para todos los lugares en mi código donde I tenía para usar fundición dinámica por alguna razón, nunca he visto que el operador as muestre ni siquiera una muestra en la creación de perfiles, y considerando que mantengo una implementación de un tipo de tiempo dinámico, ligado en tiempo de ejecución idioma (StringTemplate), supongo que eso significa algo. :)

Cuestiones relacionadas