当前位置:  开发笔记 > 编程语言 > 正文

F#静态覆盖

如何解决《F#静态覆盖》经验,为你挑选了1个好方法。

我有一个抽象类,有一个抽象成员.我想将此成员继承到不同的类,并使成员的覆盖静态.

像这样的东西:

[]
type Parent() = class
  abstract member Att : int
end;;
type Son() = class
  inherit Parent()
  static override Att = 10
end;;
type Daughter() = class
  inherit Parent()
  static override Att = 20
end;;

或者

[]
type Parent() = class
  static abstract member Att : int
end;;

要么

[]
type Parent() = class
  abstract static member Att : int
end;;

那么所有的儿子都会有Att = 10而且所有的女儿都会有Att = 20.这不起作用.

有没有办法让这项工作?



1> Tomas Pastir..:

这在对象模型的定义中是不可能的 - 静态方法也不能在C#和任何其他对象语言中被覆盖.

这也在这里提到(对于Java,但这是面向对象编程的一般性):

为什么我们不能在派生类中覆盖静态方法

覆盖取决于类的实例.多态性是您可以对类进行子类化,并且实现这些子类的对象将对超类中定义的那些方法具有不同的行为(并在子类中重写).静态方法不属于类的实例,因此该概念不适用.

特别是对于抽象类,这没有意义 - 你要么在派生类上调用方法(这意味着它不需要在超类中定义),要么在超类上调用(这意味着它不需要是抽象的),或在一个实例上(这意味着它不能是静态的).

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有