Comprendo che l'acquisizione delle variabili viene eseguita dal compilatore e non dalle classi nello stesso framework .NET. Tuttavia, quando è stata introdotta la DLR, alcuni di questi lavori devono aver sicuramente dovuto essere eseguiti all'interno del framework in modo da posticiparlo al runtime.Qual è il codice che crea le variabili/chiusure catturate?
Per esempio, nel pezzo di codice indicato di seguito:
dynamic d = ...
Func<int, bool> func = n => n > d;
La risoluzione tipo della variabile d
e la sua verifica che è un numero intero deve essere fatto in fase di esecuzione. E dal momento che d
è una variabile nel metodo di contenimento della lambda, verrà catturata in una chiusura. Questa parte verrà sicuramente eseguita in fase di esecuzione.
Quindi, deduco ci deve essere una parte dei gruppi DLR (System.Core.dll principalmente) che fa questa parte.
Ho cercato e ho potuto trovare alcune classi che sembrano sospettosamente riprovevoli per questo tipo di attività. In particolare, ExpressionQuoter (nonostante il suo aspetto, questa classe non cita espressioni lambda come fa il metodo Expression.Quote
), HoistedLocals e VariableBinder.
Ho pensato di invitare qualcuno che sa meglio rispondere a questo.
Quale classe o parte del framework .NET trasforma i locals che contengono metodi di lambdas (o metodi anonimi) in quelle classi separate che hanno variabili statiche che li rappresentano?
Ci scusiamo per questo errore prima. Stavo correggendo il mio frammento di codice dopo che hai commentato per la prima volta la domanda. –
Nessun problema. Questo risponde alla domanda? – usr
Sì, signore. Lo fa. Ho dimenticato che la dinamica è un segnaposto per oggetto per quanto riguarda il compilatore. Grazie. –