Jon*_*eet 19
Skeet的意思是静态类既抽象又密封?
我的意思是那是IL的代表.
例如:
static class Foo {}
Run Code Online (Sandbox Code Playgroud)
生成IL:
.class public abstract auto ansi sealed beforefieldinit Foo
extends [mscorlib]System.Object
{
} // end of class Foo
Run Code Online (Sandbox Code Playgroud)
因此,即使是不了解静态类的语言也会阻止您从中派生另一个类,并阻止您实例化它.
另外,这就是C#规范引用它的方式:
静态类可能不包含sealed或abstract修饰符.但是请注意,由于静态类无法实例化或派生自,因此它的行为就像密封和抽象一样.
小智 5
CIL没有静态类.CIL有抽象类,并有密封类.抽象类不能直接实例化(尽管具体类可以从抽象类派生).密封的类不能从中派生出来.结合这些,您可以使用C#编译器来实现静态类.
顺便提一下,CIL没有静态类这一事实意味着静态类作为泛型类型参数的限制也不存在于CIL中.给定a static class X,CIL允许您创建C#将调用的内容List<X>.但是,鉴于不能有任何实例X或从中派生的任何类,您可以在此类列表中存储的唯一值是null.