为什么我们不能在接口/抽象类中拥有共享(静态)函数/方法?

时间:2008-12-01 09:04:48

标签: .net

在.net中,我们不允许在抽象类和接口中共享函数/方法。 为什么他们不被允许?

在其他语言中是否相同。像Java?

如果允许共享方法,可能会出现什么问题?

1 个答案:

答案 0 :(得分:12)

您当然可以在抽象类中使用静态(共享)方法。但是,你不能在接口中使用它们。

听起来你真的想要虚拟静态/共享方法 - 而这些方法并不可用。静态方法不是多态的,并且以大多数 .NET的方式工作,这没有多大意义。当将它们用作类型参数约束时,能够在接口中指定静态方法是有意义的 - an idea I've blogged about before now

Delphi具有元类的概念,其中(据我理解)类的类中的实例方法就像类本身中的静态方法一样 - 一个元类可以从另一个元类派生,覆盖方法我不是Delphi程序员,但如果您想了解更多信息,chapter 2 of Delphi in a Nutshell可能对您有用。

Java允许在接口中指定常量,但这是那里支持的唯一静态成员。

有趣的是,CLI本身 允许接口中的静态方法,但这是带有实体的方法 - 而不仅仅是接口的实例成员提供的签名。