重复 Determine if a type is static
我是否可以检查属性/属性以查看System.Type
是否为静态类?
我可以通过测试Type
是否有静态方法,并且除了从System.Object
继承的方法之外没有实例方法来间接地做到这一点,但它不会感觉干净(我怀疑我错过了一些东西,这不是static class
)的严格定义。
在类型上是否有一些我会遗漏的东西会断然告诉我这是一个静态类?
或者是static class
c#语法糖并且没有办法在IL中表达它?
感谢
BW
答案 0 :(得分:12)
是的,你需要测试IsAbstract
和IsSealed
。非静态类永远不能同时存在。不太好但是有效。
答案 1 :(得分:6)
在IL级别,任何静态类都是抽象和密封的。所以你可以这样做:
Type myType = typeof(Form1);
if (myType.GetConstructor(Type.EmptyTypes) == null && myType.IsAbstract && myType.IsSealed)
{
// class is static
}
答案 2 :(得分:3)
if (typeof(C).Attributes.HasFlag(System.Reflection.TypeAttributes.Abstract) &&
typeof(C).Attributes.HasFlag(System.Reflection.TypeAttributes.Sealed) &&
typeof(C).Attributes.HasFlag(System.Reflection.TypeAttributes.Class) )
{
}
但可能有一个具有此属性的类但它不是静态的