Qual è il costo di & # 8220; come & # 8221; rispetto a QueryInterface in COM o dynamic_cast in C ++?
-
10-07-2019 - |
Domanda
Sto ancora cercando di mappare le mie vecchie e profonde conoscenze dal C / C ++ alle mie conoscenze .Net un po 'più superficiali. Oggi è giunto il momento di "come" (e implicitamente "è" e cast) in C #.
Il mio modello mentale di " as " è che si tratta di un QueryInterface
o dynamic_cast
(un dynamic_cast
con argomento pointer, non riferimento, cioè) per C #. La mia domanda è duplice:
- Il mio confronto è giusto?
- Qual è il costo relativo di " as " rispetto a
QueryInterface
odynamic_cast
?
Soluzione
-
Sì, il confronto è corretto, soprattutto quando si tratta di puntatori. Ognuno dei tre ha esito positivo e restituisce un puntatore non null del tipo di destinazione oppure restituisce null.
-
In realtà è possibile utilizzare l'operatore
come
quando si lavora con oggetti COM in .NET, rendendolo equivalente aQueryInterface
con un piccolo overhead per il gestito / Interoperabilità COM All'interno del CLR (casting tra tipi gestiti), l'operatoreas
è estremamente leggero rispetto aQueryInterface
in COM odynamic_cast in C ++. Per tutti i posti nel mio codice in cui dovevo utilizzare il cast dinamico per qualche motivo, non ho mai visto l'operatore
come
mostrare nemmeno un campione nella profilazione - e considerando mantenere un'implementazione di un linguaggio di runtime (StringTemplate) tipicamente dinamicamente, suppongo che significhi qualcosa. :)