Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 找出类型是否可实例化_C#_Reflection_Interface_Types_Instantiation - Fatal编程技术网

C# 找出类型是否可实例化

C# 找出类型是否可实例化,c#,reflection,interface,types,instantiation,C#,Reflection,Interface,Types,Instantiation,在C#中,如何确定类型是否可以实例化?我试图避免Activator.CreateInstance异常 我当前的方法是type.IsClass&!type.IsInterface,但我担心这可能会在抽象类上失败,等等。我还考虑过检查type.TypeInitializer==null,但我不确定这是否是万无一失的 找出类型是否可实例化的最简单/最有效的方法是什么。它将处理抽象类和静态类。您可能还想查看还有许多其他陷阱。它可以有一个私有或受保护的构造函数。或者它可能没有默认构造函数,只有采用某些参数

在C#中,如何确定
类型
是否可以实例化?
我试图避免Activator.CreateInstance异常

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


找出
类型是否可实例化的最简单/最有效的方法是什么。它将处理抽象类和静态类。您可能还想查看

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


一个例外是你的朋友,它告诉你你的假设是错误的。永远不要故意阻止.NET framework发挥作用。

为了使其“安全”,他不需要检查GetConstructor()返回的ConstructorInfo对象的IsPublic和类似属性。我不知道。我在问..我正在创建接口实现的实例,所以我确实对它们有所了解。不过,我很欣赏这个警告。很好,那么您不必担心异常或意外创建抽象类。一个简单的众所周知的名字就可以完成这项工作。我该如何检查默认构造函数呢?同样,异常是好的,但优雅地处理它们也是好的。对于“私有构造函数”和“非默认构造函数”示例,我宁愿检查“if(notnull)”而不是“try catch(null)”。IsAbstract似乎也在为接口返回true: