找出type是否可实例化

时间:2011-04-06 19:17:54

标签: c# reflection interface types instantiation

在C#中,如何判断Type是否可以实例化?我试图避免使用Activator.CreateInstance异常。

我当前的方法是type.IsClass && !type.IsInterface,但我担心这可能会在抽象类等上失败。我还考虑检查type.TypeInitializer == null,但我不确定这是否也是万无一失的。

找出Type是否可实例化的最简单/最有效的方法是什么?

2 个答案:

答案 0 :(得分:11)

考虑IsAbstract。它将处理抽象类和静态类。您可能还想查看IsInterface

答案 1 :(得分:7)

还有很多其他的陷阱。它可以有一个私有或受保护的构造函数。或者它可能没有默认构造函数,只有构造函数采用某些参数类型。如果您不得不担心,那么当它不应该被使用时你肯定会使用Activator.CreateInstance()。只是任意构建对象只能造成破坏,你不知道它们可能有什么样的副作用。避免使用“FormatDisk”类。

例外是你的朋友,它告诉你你的假设是错误的。永远不要故意阻止.NET框架的帮助。