c# .net reflection dynamic delegates

c# - Delegate.CreateDelegate vs DynamicMethod versus Expression



.net reflection (2)

Preguntas sobre cómo hacer reflexionar y explorar delegados ...

Si necesito crear delegados Func<T, TResult> a métodos en tipos cargados dinámicamente, podría utilizar (1) Delegate.CreateDelegate (2) DynamicMethod (3) Árboles de Expression .

Digamos que el conjunto de tipos / métodos cargados dinámicamente se reflejan una vez al inicio de la aplicación a través de config y se usan durante toda la vida de la aplicación (el rendimiento de arranque no es un problema y tampoco lo es la memoria), los delegados se guardan en caché y se envían en un forma fuertemente tipada. Estos delegados son rutas calientes a las que se accede simultáneamente.

¿Qué método de enlace dinámico preferiría y por qué?



Si en realidad son métodos existentes para los que tiene un MethodInfo y tienen las firmas correctas, entonces diría que Delegate.CreateDelegate es el camino correcto a seguir: hace exactamente lo que quiere, sin problemas. DynamicMethod o árboles de expresión si tuviera que crear un delegado para ejecutar alguna lógica que no se haya capturado en un método.

Los árboles de expresión son (IMO, y no he usado DynamicMethod enfadado) algo más fáciles de usar que DynamicMethod , pero son más restringidos; básicamente, solo pueden representar una sola expresión (lo que podría llamar a otro método, por supuesto). DynamicMethod le brinda mucha flexibilidad, pero necesita comprender IL razonablemente bien.

¿Eso ayuda?