获取类型的默认构造函数的最有效方法

时间: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

但是,如果对象具有参数构造函数,则此操作将失败

希望这可以帮助