在.net中,我们不允许在抽象类和接口中共享函数/方法.为什么他们不被允许?
在其他语言中也是如此.喜欢Java?
如果允许共享方法,可能会出现什么问题?
你当然可以在抽象类中使用静态(共享)方法.但是,您不能在接口中使用它们.
听起来你真的想要虚拟静态/共享方法 - 而这些方法是不可用的.静态方法不是多态的,并且与大多数 .NET的工作方式一样,这没有多大意义.当将它们用作类型参数约束时,能够在接口中指定静态方法是有意义的 - 这是我之前在博客上发表的一个想法.
Delphi具有元类的概念,其中(据我理解)类的类中的实例方法就像类本身中的静态方法一样 - 一个元类可以从另一个派生,覆盖方法等.我不是Delphi程序员,但如果您想了解更多信息,那么在Nutshell中Delphi的第2章可能对您有用.
Java允许在接口中指定常量,但这是那里支持的唯一静态成员.
有趣的是,CLI本身确实允许接口中的静态方法,但这是带有主体的方法 - 而不仅仅是接口的实例成员提供的签名.