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

今天在写代码时,顺手把一个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/这篇文章里研究过了这个问题。

 

时间: 2024-10-28 10:14:11

static类为什么不能用sealed关键字修饰的相关文章

Scala的sealed关键字

缘起 今天在学习Akka的监控策咯过程中看到了下面一段代码: def supervisorStrategy(): SupervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 10 seconds) { case _: ArithmeticException => Resume case _: IllegalArgumentException => Restart case _: NullPointe

Java中synchronized关键字修饰方法同步的用法详解_java

Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有一个允许被访问. 静态方法则有不同的行为.用synchronized关键字声明的静态方法,同时只能够被一个执行线程访问,但是其他线程可以访问这个对象的非静态的synchronized方法.必须非常谨慎这一点,因为两个线程可以同时访问一个对象的两个不同的synchronized方法,即其中一个是静态s

使用Action、Func,EventHandler,params关键字修饰的参数的匿名委托和Lambda表

使用Action.Func,EventHandler,params关键字修饰的参数的匿名委托和Lambda表达式 在.NET在,我们经常使用委托,委托的作用不必多说,在.NET 2.0之前,我们在使用委托之前,得自定义一个委托类型,再使用这个自定义的委托类型定义一个委托字段或变量..NET 2.0给我们带来了Action.Func两个泛型委托,.NET3.0给我们带来了Lambda,这一切使得委托的定义和使用变得简单起来.下面的例子中的委托都使用了Lambda表达式. 一.Action系列的泛型

C++中static类成员

static局部变量 static局部变量确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化 这种对象一旦被创建,在程序结束前不会被撤销.在该函数被多次调用的过程中,静态局部对象会持续存在并保存它的值. #include<iostream> #include<string> #include<assert.h> using namespace std; size_t count_calls() { static size_t ctr=0; return ++

java-声明一个类,可使用的权限修饰符为什么不能用protected和privatr

问题描述 声明一个类,可使用的权限修饰符为什么不能用protected和privatr 声明一个类,可使用的权限修饰符为什么不能用protected和privatr 解决方案 私有的类,不能用,有何意义? 解决方案二: 这是java语法的规定,类的修饰符号有:public 公共类:default 默认包内访问权限(即class前什么都不假):abstract 抽象类: fanal 不能被继承的类: static 静态类: private 只能修饰内部类,一般不推荐使用. 解决方案三: 公开的可以

static 类里的static变量和非static类里static变量生命周期各是多少?

问题描述 比如在ssh里,定义一个static 类的static变量和一个非static类static变量 它们的生命周期各是多长呢? 是到应用程序结束? 还是用户登陆的时候创建用户登出的时候销毁? 还是由垃圾回收器决定,具体时间不确定? 解决方案 类不能定义为static的.只有类的成员才可以是static(包括变量和方法)static成员第一次用的时候创建,之后就一直在了.直道应用程序关闭.解决方案二:static可修饰的东西很多,分别有如下一些: 1. static修饰类中的变量,称这样的

c++ static 类实例 是否调用折构函数?

问题描述 c++ static 类实例 是否调用折构函数? 比如说static MyClass myclass; myclass的折构函数会不会被调用? 解决方案 会调用,但是可能不会再控制台输出 在VC++中编写如下代码: #include <iostream> using namespace std; class A { public: ~A() { cout << "~A" << endl; } }; static A a; int main(

java中什么是实体类,为什么实体类的变量都用private修饰?

问题描述 java中什么是实体类,为什么实体类的变量都用private修饰? java中什么是实体类,为什么实体类的变量都用private修饰?能否举个实体类的简单例子,谢谢 解决方案 关于什么是实体类,可以看这里:Java什么是实体类实体类有什么用? 例如一个订单实体类Order.java,里边:id(主键).orderNo(订单号).userId(订单所属用户ID).status(支付状态).createTime(创建时间)等属性. 因为这些属性,基本都是供订单类自己使用的,所以一般都将它们

何时使用static类(工具类)

一个static类,指全部成员都是static方法构成的,而没有任何成员变量, 也称为Utility class 或者Utility Pattern [参考: Utility Pattern].它可以在程序中直接使用该类的方法,而不用实例化.static class相对单例有更好的性能,原因是它的方法不需要实例方法的动态绑定 (static方法本身不能被复写).  static类可以看作某一组方法的集合,也能够更好的复用代码.static类各个方法应当是无状态的(stateless),即没有成员