它不能被宣布为抽象或密封,尽管它两者都是隐含的。
抽象类是派生类型的基类。我们只能通过实例化一个派生类型来实例化一个抽象类。另一方面,我们不能从密封的类中获得任何东西。在许多意义上,一个密封的,抽象的课程将毫无用处。 Skeet的意思是静态类既抽象又密封?他只是在谈论无法直接实例化它吗?
答案 0 :(得分:19)
Skeet的意思是静态类既抽象又密封?
我的意思是那是IL中的代表。
例如:
static class Foo {}
生成IL:
.class public abstract auto ansi sealed beforefieldinit Foo
extends [mscorlib]System.Object
{
} // end of class Foo
因此,即使是一种不了解静态类的语言也会阻止你从中派生另一个类,并阻止你实例化它。
此外,C#规范如何引用它:
静态类可能不包含sealed或abstract修饰符。但请注意,由于静态类无法实例化或派生自,因此它的行为就像是密封和抽象一样。
答案 1 :(得分:5)
CIL没有静态类。 CIL有抽象类,并有密封类。抽象类不能直接实例化(尽管具体类可以从抽象类派生)。密封的类不能从中派生出来。结合这些,您可以使用C#编译器来实现静态类。
顺便提一下,CIL没有静态类这一事实意味着静态类作为泛型类型参数的限制在CIL中也不存在。给定static class X
,CIL允许您创建C#称之为List<X>
的内容。但是,鉴于不能存在X
或从中派生的任何类的任何实例,您可以在此类列表中存储的唯一值是null
。
答案 2 :(得分:1)
它是隐式抽象的,因为你无法实例化该类。
它是隐式密封的,因为你无法从中得到它。
答案 3 :(得分:1)
这意味着它是隐式抽象的,因为类无法实例化 它是隐式密封的,因为你无法扩展或继承它。