dart';有哪些好的解决方法;为什么缺少静态类型语义?
我来自C#/F#/Haskell,所以我试图为我习惯用类型解决的编程问题提出解决方案dart';有哪些好的解决方法;为什么缺少静态类型语义?,dart,Dart,我来自C#/F#/Haskell,所以我试图为我习惯用类型解决的编程问题提出解决方案 类,其中T:new()在C#中,这主要是为了我可以在某个地方做新的T()。这会在Dart中创建格式错误的类型错误。有没有一个合理的惯用方法来解决这个问题?也许是工厂 我对mixin做了一些实验,在继承的mixin成员发生名称冲突的情况下,最后一个mixin获胜。因此,以下几点: 抽象类mixA{void foo();} 抽象类mixB{void foo();} 类C使用mixA,mixB{}扩展对象 新的C()
假设我将两个mixin与一个同名字段混合。子类实例在运行时是否有2个字段(只有1个字段是不可访问的),或者对象是否像字典一样,每个名称只有1个插槽?1不可能。不能对泛型类型(或变量)调用
new
。最常见的解决方法是创建一个分配对象的闭包
2的答案来自这样一个事实,即mixin可以被视为超类:A用B扩展对象,C
基本上等同于:
class B' extends Object { <copy over code inside B> }
class C' extends B' { <copy over code inside C> }
class D extends C' { ... }
class B'扩展对象{}
类C'扩展了B'{}
类D扩展了C'{…}
考虑到这一点:
- 不,无法访问隐藏的超级元素
- 对。您将得到多个字段
小提示:
部分并不完全正确,因为这会改变库的作用域。从概念上讲,来自mixin B的代码位于声明mixin的库中。1是不可能的。不能对泛型类型(或变量)调用new
。最常见的解决方法是创建一个分配对象的闭包
2的答案来自这样一个事实,即mixin可以被视为超类:A用B扩展对象,C
基本上等同于:
class B' extends Object { <copy over code inside B> }
class C' extends B' { <copy over code inside C> }
class D extends C' { ... }
class B'扩展对象{}
类C'扩展了B'{}
类D扩展了C'{…}
考虑到这一点:
- 不,无法访问隐藏的超级元素
- 对。您将得到多个字段
部分并不完全正确,因为这会改变库的作用域。mixinb中的代码概念上位于声明mixin的库中