F#静态覆盖

Ras*_*mus 2 inheritance f# static overriding

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

像这样的东西:

[<AbstractClass>]
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;;
Run Code Online (Sandbox Code Playgroud)

或者

[<AbstractClass>]
type Parent() = class
  static abstract member Att : int
end;;
Run Code Online (Sandbox Code Playgroud)

要么

[<AbstractClass>]
type Parent() = class
  abstract static member Att : int
end;;
Run Code Online (Sandbox Code Playgroud)

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

有没有办法让这项工作?

Tom*_*cak 6

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

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

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

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

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