在以下示例中,注释用于检查类型是否可实例化或可用:
class TypeContract
{
Type indicator;
public TypeContract(Type type)
{
// if (!type.IsInstantiable)
// {
// throw new ArgumentException();
// }
indicator = type;
}
}
作为参考,System.String
是可实例化的,但System.Convert
,IDictionary<,>
和TKey
不是。请注意,构造函数可访问性在类方面不是问题。
C#编译器如何检查这个?有可靠的类型属性吗? Perhabs它使用手动检查,如:
!((type.IsAbstract && type.IsSealed) || type.IsGenericParameter || type.ContainsGenericParameters)
答案 0 :(得分:4)
Type.GetConstructors
返回类的公共构造函数。
您可以检查它是否返回空列表
答案 1 :(得分:2)
获取该类的Type
对象并检查以下属性:
类是静态的:type.IsAbstract && type.IsSealed
(请参阅this question)
Class是一个接口:type.IsInterface
类是枚举:type.IsEnum
Class是一个通用参数:type.IsGenericParameter
查看Type类here的文档,了解有关其提供的属性的更多信息。
之后,您可以检查可用的构造函数。