获取类型的默认构造函数的最有效方法
时间:2020-03-06 14:48:46 来源:igfitidea点击:
获取System.Type的默认构造函数(即无参数的实例构造函数)的最有效方法是什么?
我在考虑下面的代码,但似乎应该有一种更简单有效的方法。
Type type = typeof(FooBar) BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; type.GetConstructors(flags) .Where(constructor => constructor.GetParameters().Length == 0) .First();
解决方案
type.GetConstructor(Type.EmptyTypes)
如果我们确实需要ConstructorInfo对象,请参见Curt Hagenlocher的答案。
另一方面,如果我们实际上只是想在运行时从System.Type
创建对象,请参见System.Activator.CreateInstance
-不仅仅是面向未来的(Activator处理的详细信息比ConstructorInfo.Invoke
),它也不太丑陋。
你想尝试FormatterServices.GetUninitializedObject(Type)
这比Activator.CreateInstance好
但是,此方法不会调用对象构造函数,因此,如果在此处设置初始值,则此方法将无效
检查MSDN这件事
http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.formatterservices.getuninitializedobject.aspx
这里还有另一种方式
http://www.ozcandegirmenci.com/post/2008/02/Create-object-instances-Faster-than-Reflection.aspx
但是,如果对象具有参数构造函数,则此操作将失败
希望这可以帮助