微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dart抽象基元实现

如何解决Dart抽象基元实现

我正在研究基本的Dart类型(double,int,String等)的实现,发现其中许多类都是abstract。我想知道这些类是否为abstract,那么哪个类实现了它们?当这些类甚至无法实例化时,如何将对象分配给特定类型?例如,

double一个abstract类,我无法实例化它

var d = double();

但是怎么办

var d = 2.5;
print(d is double);

打印true吗? dart如何知道ddouble的对象?

解决方法

Dart平台库分为您正在查看的公共共享代码和与平台相关的内部代码(“补丁文件”),这些代码为声明为external的函数提供实现,并且还提供了平台依赖的其他内部机制(然后还有运行时系统的本机)。

这些特定于平台的文件包含实现诸如intString之类的类型的声明。该规范说您不能继承intString的子类,但是运行时系统还是这样做。您的“原始”对象是抽象接口的那些隐藏子类的实例。

运行时系统可以(并且确实)可以进一步优化其中一些类的 representation 。例如,VM具有int的子类型Smi(“小整数”),该子类型将值存储在指针中,而不是在堆中分配对象,并且Web平台实现{{1 }}作为普通的JavaScript数字。当您在它们上调用方法时,它们必须特别对待这些值,因为它们的结构与其他对象不同。但这是一种优化,您可以认为这些值只是由内部隐藏类实现的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。