gpt4 book ai didi

inheritance - F# 静态覆盖

转载 作者:行者123 更新时间:2023-12-02 08:23:22 26 4
gpt4 key购买 nike

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

像这样:

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

然后所有 Sons 的 Att=10,所有 Daughters 的 Att=20。这是行不通的。

有没有办法让它工作?

最佳答案

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

这在例如这里也是(对于 Java,但这对面向对象的编程来说是通用的):

Why cannot we override static method in the derived class

Overriding depends the an instance of a class. Polymorphism is that you can subclass a class and the objects implementing those subclasses will have different behaviors for those method defined in the superclass (and overridden in the subclasses). Static methods do not belong to an instance of a class so the concept is not applicable.

特别是对于抽象类,这没有意义 - 您要么在派生类上调用方法(这意味着它不需要在父类(super class)中定义),要么在父类(super class)上调用(这意味着它不需要'不需要是抽象的)或实例(这意味着它不能是静态的)。

关于inheritance - F# 静态覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com