在实际项目中,为了减少项目之间的依赖。反射是必不可少,由于反射的性能问题,大型项目中实际都是通过缓存解决。避免每次反射,一般情况下,使用字段缓存Type,下次直接通过Type创建实例。实际上,当缓存Type很多的情况下,应用程序的缓存占用将会很大。C#提供TypeHandle来减少缓存,以下演示TypeHandle和MethodHandle来恢复Type和MethodBase.
public static void Main()
{
//Type可以缓存的TypeHandle对象
var type = typeof(StringBuilder);
var handle = type.TypeHandle;
var typeFromHandle = Type.GetTypeFromHandle(handle);
//方法缓存方式
var method = typeof(StringBuilder).Assembly.GetExportedTypes()[0];
var methodHandle = method.GetMethods()[0].MethodHandle;
var methodFromHandle = MethodBase.GetMethodFromHandle(methodHandle);
}