有很多关于加速反射调用的帖子,例如:
https://codeblog.jonskeet.uk/2008/08/09/making-reflection-fly-and-exploring-delegates/
和这里:
示例:使用.NET/C#中的委托加速Reflection API
我的问题是关于加速泛型调用.这有可能吗?
我有一个抽象类和一个实现它的类......
public abstract class EncasulatedMessageHandler<T> where T : Message
{
public abstract void HandleMessage(T message);
}
public class Handler : EncasulatedMessageHandler<MyMessageType>
{
public int blat = 0;
public override void HandleMessage(MyMessageType message) { blat++; }
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是建立这些消息处理程序类的列表并快速调用它们的HandleMessage()
目前,我正在做的事情大致如下:
object handler = Activator.CreateInstance(typeof(Handler)); // Ignore this, this is done up front.
MethodInfo method = type.GetMethod("HandleMessage", BindingFlags.Instance | BindingFlags.Public);
Action<object> hook = new Action<object>(delegate(object message)
{
method.Invoke(handler, new object[] { message });
});
// …Run Code Online (Sandbox Code Playgroud)