Questions about Making reflection fly and exploring delegates…
If I need to create delegates Func<T, TResult> to methods on dynamically loaded types I could potentially use (1) Delegate.CreateDelegate (2) DynamicMethod (3) Expression trees.
Lets say the set of dynamically loaded types/methods are reflected once at application startup via config and used throughout the lifetime of the app (start-up performance is not an issue and neither is memory), the delegates are cached and dispatched to in a strongly-typed way. These delegates are hot paths accessed concurrently.
Which dynamic binding method would you prefer and why?
If they’re actually existing methods which you have a
MethodInfofor, and they have the right signatures, then I’d sayDelegate.CreateDelegateis the right way to go – it does exactly what you want, with no fuss. I’d useDynamicMethodor expression trees if I needed to build a delegate to execute some logic which wasn’t already captured in a method.Expression trees are (IMO, and I haven’t used
DynamicMethodin anger) slightly easier to use thanDynamicMethod, but they’re more restricted – basically they can only represent a single expression (which could call another method, of course).DynamicMethodgives you lots of flexibility, but you need to understand IL reasonably well.