代码改变世界

static类为什么不能用sealed关键字修饰

2010-03-25 14:34  潇湘隐者  阅读(1875)  评论(0编辑  收藏  举报
今天在写代码时,顺手把一个static 类前面加上sealed关键字,结果编译时报错:” 类不能既是静态的又是密封的“。很是纳闷,sealed字段修饰类不是代表该类不能被继承吗,于是我去掉sealed关键字,生成一个dll。然后用Reflector查看了这个这个类的IL,结果发现如下情况:

public static class Utility 被翻译成下面的代码了

.class public abstract auto ansi sealed beforefieldinit Utility      extends [mscorlib]System.Object
 
 我想应该是static编译成IL时翻译成了abstract auto ansi sealed,在类前面再加一个sealed那就多余了,然后我查了下资料
 发现static类必须直接从System.Object继承,不实现任何接口,因为接口方法只能通过类的实例来调用;到这里我也明白了个大概了. 后来在博客园搜索了下,发现有人已经在http://kb.cnblogs.com/a/1052558/这篇文章里研究过了这个问题。