gpt4 book ai didi

dart - 有没有比super.test()更好的方法来调用覆盖的行为函数?

转载 作者:行者123 更新时间:2023-12-03 03:26:50 25 4
gpt4 key购买 nike

我已经将许多代码抽象为行为,现在当我这样做时:

class B extends A with behave {
B():super(){}
}

class A extends PolymerElement{
A(){}
}

abstract class behave {
test(){ print("Test"); }
}

因此,我一直试图做的是创建工作流,而不必为此新功能测试添加引用

到目前为止,如果您在A或B中实现测试,它将覆盖我创建的行为。但我希望对此添加更多,类似于:
class B extends A with behave {
B():super(){}

test():super.test(){}
}

这会像调用父测试一样。现在,当我看这个问题时,如果行为是在 parent 中发生的话,这将是有意义的。因此,让我们测试一下。
abstract class behave { ... }
class A extends behave { ... }
class B extends A {
test(){
super.test();
}
}

这将起作用并执行我想做的事情...为什么我不能在实例中引用它? test():super.test(){ ... }似乎如前所述,将错误作为构造函数错误。

现在,如果我们将其放回我的原始设计,就像使用B一样
abstract class behave { ... }
class A { ... }
class B extends A with behave {
test(){
super.test();
print("Foo");
}
}

现在,它似乎按预期工作,要求我们创建对此行为的 super 引用。

是否有一种使用 :引用父函数调用的想法,或者仅用于构造函数?我会说,是的,它目前仅用于构造函数,但为什么不附加其他功能。如果我想在模仿子实现的行为中创建一系列函数,则应根据函数所需的顺序在函数底部的顶部运行 super.test()

阅读文档时我在dart中缺少什么吗?或者这是暂时可行的吗?

最佳答案

我怀疑foo() : super.foo()语法是否会添加到该语言中。构造函数初始值设定项的:很有用,因为可以在编译时分析初始值设定项,这使得验证例如是否设置了最终字段变得很简单。函数中的:语法只是将该函数调用放在函数开头的语法糖,似乎并没有增加太多值(value)。

顺便说一句,您可以将 @mustCallSuper 添加到test()函数中。这将为linter添加一项检查,即所有覆盖test()的方法都必须调用super.test()

关于dart - 有没有比super.test()更好的方法来调用覆盖的行为函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639850/

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