当前位置: 首页 > 编程语言 > C#

Activator.CreateInstance()和typeof(T).InvokeMember()与BindingFlags.CreateInstance之间的区别分享

时间:2023-04-11 02:14:38 C#

C#学习教程:Activator.CreateInstance()和typeof(T)。InvokeMember()和BindingFlags.CreateInstance区别分享区别,这个问题已经有人问过,有人回答过,还请见谅。给定类T,以下内容之间有何区别?TmyObj=Activator.CreateInstance();TmyObj=typeof(T).InvokeMember(null,BindingFlags.CreateInstance,null,null,null);一种解决方案比另一种更好吗?反编译RuntimeType.InvokeMember会生成以下代码片段:returnActivthis,bindingFlags,binder,providedArgs,culture);}换句话说,InvokeMember调用Activator.CreateInstance与那些BindingFlags.它在做业务之前会经过几层调用(检查绑定,验证参数)。Activator.CreateInstance更简洁:publicstaticTCreateInstance(){boolbNeedSecurityCheck=true;布尔canBeCached=假;RuntimeMethodHandleemptyHandle=RuntimeMethodHandle.EmptyHandle;返回(T)RuntimeTypeHandle.CreateInstance(typeof(T)as,RuntimetrueType,refcanBeCached,refemptyHandle,refbNeedSecurityCheck);编辑你可能希望后者更快,但是一个名为RuntimeType.CreateInstanceSlow的方法也调用RuntimeTypeHandle.CreateInstance来完成工作;如果它找不到构造函数的Activator缓存条目,它将用作回退。如果您正在寻找两者中最快的解决方案,我会做一些性能测试。以上就是C#学习教程的全部内容:Activator.CreateInstance()与typeof(T).InvokeMember()和BindingFlags.CreateInstance的区别。请注意——本文摘自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢