我今天一直在思考 C# 和 CIL 类型系统,并且开始想知道为什么静态类被视为类。在很多方面它们并不是真正的类:
- “普通”类可以包含非静态成员,而静态类则不能。在这方面,类更类似于struct与静态类相比,结构体具有单独的名称。
- 您可以引用“普通”类的实例,但不能引用静态类(尽管它被视为“引用类型”)。在这方面,类更类似于界面与静态类不同,但接口具有单独的名称。
- 静态类的名称永远不能用在通常适合类型名称的任何地方:您不能声明此类型的变量,不能将其用作基类型,也不能使用它作为泛型类型参数。在这方面,静态类有点像命名空间.
- “普通”类可以实现接口。再一次,这使得类更加类似于structs比静态类。
- “普通”类可以从另一个类继承。
同样奇怪的是静态类被认为是派生自系统对象。虽然这允许他们“继承”静态方法Equals and 参考等于,该继承的目的是有问题的,因为您会调用这些方法object反正。 C# 甚至允许您在静态类上显式指定无用的继承,但不能在接口或结构上指定,其中隐式派生自object and 系统值类型,分别实际上有一个目的。
关于特征子集参数:静态类具有类特征的子集,但它们也具有结构体特征的子集。所有使类与其他类型不同的东西似乎不适用于静态类。
关于typeof争论:将静态类变成新的不同类型并不妨碍它被用于typeof.
考虑到静态类的奇特之处,以及它们与“普通”类之间缺乏相似之处,难道它们不应该被制作成一种单独的类型而不是一种特殊的类吗?
就 CLR 而言,它是一个类。基本上,它只是 C# 编译器中的语法糖。
我认为在这里添加不同的名称不会有任何好处 - 它们的行为mostly就像只有静态方法并且不能构造的类,通常是这样的类became当我们从 C# 1 迁移到 C# 2 时,它是一个静态类。
请记住,如果您想为其创建一个新名称,这可能也意味着一个新关键字......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)