如何判断一个类型是否为静态类?

14

可能是重复的问题:
确定类型是否为静态

重复的问题: 确定类型是否为静态

是否有一种属性/特性可供检查以查看System.Type是否为静态类?

我可以通过间接测试Type是否具有静态方法并且没有超出从System.Object继承的实例方法来做到这一点,但它感觉不够干净(我有一种隐约的感觉,我错过了某些东西,并且这不是static class的严格定义)。

在类型上是否有我所忽略的东西,将明确告诉我这是一个静态类

还是static class C#语法糖,没有办法在IL中表达它?

谢谢
BW


2
确定一个类型是否为静态:https://dev59.com/23M_5IYBdhLWcg3w43pt - CD..
这主要是C#语法。你需要检测它做什么? - Gabe
@CD:我怎么会错过那个,我在发布问题前进行了广泛搜索。大师,您的搜索技术比我强大 :) - Binary Worrier
@Gabe:我想要自动生成接口和实例类,直接映射到静态类(例如System.IO.File中的File和Directory,以及我们代码库中的许多遗留静态类)。我正在尝试引入单元测试,但这些是使用模拟进行测试的主要障碍。如果可以的话,我会自动生成包装器,手工编写太多了。 - Binary Worrier
2
第一次投票关闭自己的问题 叹气 - Binary Worrier
3个回答

16

是的,你需要同时测试IsAbstractIsSealed。非静态类永远不能同时具备这两个特性。虽然不太理想,但它能正常工作。


9

在IL级别上,任何静态类都是抽象和封闭的。因此,您可以像这样操作:

    Type myType = typeof(Form1);
    if (myType.GetConstructor(Type.EmptyTypes) == null && myType.IsAbstract && myType.IsSealed)
    {
        // class is static
    }

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) )
            {
            }

但是可能存在一个具有这些属性的类,但它不是静态的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接