Ho un programma che richiede prestazioni veloci. All'interno di uno dei suoi cicli interni, ho bisogno di testare il tipo di un oggetto per vedere se eredita da una certa interfaccia.
Un modo per farlo sarebbe con la funzionalità di controllo del tipo incorporata in CLR. Il metodo più elegante è probabilmente la parola chiave "is":
if (obj is ISpecialType)
Un altro approccio sarebbe quello di dare alla classe base la mia funzione virtuale GetType () che restituisce un valore enum predefinito (nel mio caso, in realtà, ho solo bisogno di un bool). Quel metodo sarebbe veloce, ma meno elegante.
Ho sentito che esiste un'istruzione IL specifica per la parola chiave "is", ma ciò non significa che venga eseguita velocemente quando tradotta in assembly nativo. Qualcuno può condividere alcune informazioni sull'esecuzione di "è" rispetto all'altro metodo?
AGGIORNAMENTO: Grazie per tutte le risposte informate! Sembra che un paio di punti utili siano sparsi tra le risposte: il punto di Andrew su "sta" eseguendo automaticamente un cast è essenziale, ma anche i dati sulle prestazioni raccolti da Binary Worrier e Ian sono estremamente utili. Sarebbe fantastico se una delle risposte venisse modificata per includere tutte queste informazioni.