代码之家  ›  专栏  ›  技术社区  ›  Biswanath

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

  •  6
  • Biswanath  · 技术社区  · 17 年前

    在.NET中,不允许在抽象类和接口中使用共享函数/方法。 为什么不允许这样做?

    其他语言也是这样吗?像Java一样?

    如果允许共享方法,那么潜在的问题是什么?

    1 回复  |  直到 14 年前
        1
  •  11
  •   Jon Skeet    17 年前

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

    听起来你真的很想 事实上的 静态/共享方法-这些方法不可用。静态方法不是以多态的方式调用的,并且 对于.NET来说,这没有什么意义。将静态方法用作类型参数约束时,能够在接口中指定静态方法是有意义的。- an idea I've blogged about before now .

    Delphi有一个元类的概念,在这个概念中,类的元类中的实例方法就像类本身中的静态方法一样,一个元类可以从另一个类派生,覆盖方法等。我不是Delphi程序员,但是 chapter 2 of Delphi in a Nutshell 如果您需要更多信息,可能对您有用。

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

    有趣的是,cli本身 允许在接口中使用静态方法,但这是具有主体的方法——不仅仅是由接口的实例成员提供的签名。

    推荐文章