Qual è il costo di & # 8220; come & # 8221; rispetto a QueryInterface in COM o dynamic_cast in C ++?

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

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:

  1. Il mio confronto è giusto?
  2. Qual è il costo relativo di " as " rispetto a QueryInterface o dynamic_cast ?
È stato utile?

Soluzione

  1. 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.

  2. In realtà è possibile utilizzare l'operatore come quando si lavora con oggetti COM in .NET, rendendolo equivalente a QueryInterface con un piccolo overhead per il gestito / Interoperabilità COM All'interno del CLR (casting tra tipi gestiti), l'operatore as è estremamente leggero rispetto a QueryInterface in COM o dynamic_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. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top