繁体   English   中英

F#静态替代

[英]F# static override

我有一个抽象类,有一个抽象成员。 我想将此成员继承到不同的类,并使该成员的替代成为静态。

像这样:

[<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;;

或者

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

要么

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

那么所有儿子的Att = 10,所有女儿的Att = 20。 这是行不通的。

有没有办法使这项工作?

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

例如,在这里也提到了这一点(对于Java,但这是面向对象编程的常规内容):

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

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

专门针对抽象类,这没有意义-您可以在派生类上调用方法(这意味着不需要在超类中定义),也可以在父类上调用方法(这意味着它不需要是抽象的)或实例(这意味着它不能是静态的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM