Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 米辛阴影_Dart - Fatal编程技术网

Dart 米辛阴影

Dart 米辛阴影,dart,Dart,假设我有这样的代码: A类{foo()=>“A”} 类B{foo()=>“B”;} 类C{foo()=>“C”} 类混合扩展了A和B,C{ foo()=>“混合”; bar()=>super.foo(); } 类MessABC=带有A、B、C的对象; 类MessBCA=带有B、C、A的对象; MessCAB类=带有C、A、B的对象; void main(){ 混合=新的混合(); MessABC mABC=新MessABC(); MessBCA mBCA=新MessBCA(); MessCAB

假设我有这样的代码:

A类{foo()=>“A”}
类B{foo()=>“B”;}
类C{foo()=>“C”}
类混合扩展了A和B,C{
foo()=>“混合”;
bar()=>super.foo();
}
类MessABC=带有A、B、C的对象;
类MessBCA=带有B、C、A的对象;
MessCAB类=带有C、A、B的对象;
void main(){
混合=新的混合();
MessABC mABC=新MessABC();
MessBCA mBCA=新MessBCA();
MessCAB mCAB=新MessCAB();
打印(“Mix.foo=${Mix.foo()}Mix.bar=${Mix.bar()}\n”
“mABC.foo=${mABC.foo()}\n”
“mBCA.foo=${mBCA.foo()}\n”
“mCAB.foo=${mCAB.foo()}\n”);
}
输出

Mix.foo=Mix.bar=C
mABC.foo=C
mBCA.foo=A
mCAB.foo=B

mix
对象上,我可以使用super调用
mix.foo
C.foo
(实际上我希望
A.foo
) 但是我能不能叫
A.foo
B.foo

另外,我对语义有点困惑
A、B、C
看起来像“一级枚举”,但顺序很重要。“飞镖编辑器”并没有提醒我名字冲突。也许我可以启用此警告


对我来说,这感觉像是让你们感到困惑和容易出错的事情。

Mixin应用程序是从左到右处理的。

带有A、B、C的
对象的超类是带有A、B的
对象
,它同样具有带有A的
对象的超类,然后是
对象

mixin的覆盖规则与非mixin超类的覆盖规则相同。
Mix
中的
C.foo
覆盖了从
A
B
继承的
C.foo,因此
Mix.bar
super.foo()
只到达
C.foo
,无法访问
A.foo
B.foo

重写是完全可以的,只要方法具有兼容的签名,就不会引起任何警告

对mixin最全面的描述仍然是