如何解决Dart抽象基元实现
我正在研究基本的Dart类型(double,int,String等)的实现,发现其中许多类都是abstract
。我想知道这些类是否为abstract
,那么哪个类实现了它们?当这些类甚至无法实例化时,如何将对象分配给特定类型?例如,
double
是一个abstract
类,我无法实例化它
var d = double();
但是怎么办
var d = 2.5;
print(d is double);
打印true
吗? dart如何知道d
是double
的对象?
解决方法
Dart平台库分为您正在查看的公共共享代码和与平台相关的内部代码(“补丁文件”),这些代码为声明为external
的函数提供实现,并且还提供了平台依赖的其他内部机制(然后还有运行时系统的本机)。
这些特定于平台的文件包含实现诸如int
和String
之类的类型的声明。该规范说您不能继承int
和String
的子类,但是运行时系统还是这样做。您的“原始”对象是抽象接口的那些隐藏子类的实例。
运行时系统可以(并且确实)可以进一步优化其中一些类的 representation 。例如,VM具有int
的子类型Smi
(“小整数”),该子类型将值存储在指针中,而不是在堆中分配对象,并且Web平台实现{{1 }}作为普通的JavaScript数字。当您在它们上调用方法时,它们必须特别对待这些值,因为它们的结构与其他对象不同。但这是一种优化,您可以认为这些值只是由内部隐藏类实现的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。