2008-12-01 60 views
6

在.net中我们不允许在抽象类和接口中共享函数/方法。 为什么他们不被允许?为什么我们不能在接口/抽象类中使用Shared(静态)函数/方法?

这与其他语言相同。像Java?

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

+0

也许你应该澄清你的问题。你是什​​么意思的“共享”。你可以拥有抽象类中的函数(或方法),可以被派生类和其他类使用 - 这就是它的全部要点。 – 2008-12-01 09:13:45

+0

@ Christian.K'Shared'是VB对C#的'静态'是什么# – Grokodile 2010-04-18 19:58:34

回答

11

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

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

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

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

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

相关问题