“动态”是 Dart 中的数据类型吗?

use*_*763 1 dart

我读过这dynamic是 Dart 中的一种数据类型,但是将其称为数据类型是否正确?它看起来不像一种数据类型,它似乎是一种允许变量具有任何数据类型的方法。

lrn*_*lrn 7

在 Dart 中,dynamic是一种类型。它属于类型层次结构,并通过子类型关系与其他类型相关。

它是“顶级”类型,这意味着每种类型都是 的子类型dynamic。(包括它本身,因为“子类型”关系是自反的 - 每个类型都被视为其自身的子类型,并且仅在谈论不是超类型的子类型时才使用术语“适当的子类型”。)

作为顶级类型,这意味着可以将任何值分配给 类型的变量dynamic。他们也可以是任何其他顶级类型,这主要意味着Object?。两者的区别在于:

  • 静态类型的表达式dynamic可以分配给任何类型。这显然是不安全的,因此运行时会插入一个检查,即所谓的“隐式向下转型”,其工作原理与as TargetType.
  • 您可以使用静态类型调用表达式上的任何成员dynamic。这显然是不安全的,因此如果对象没有这样的成员,运行时将会抛出异常。

这种运行时检查的不安全行为(不是静态类型检查)是类型被命名的原因dynamic。using是关闭静态类型系统dynamic的一种方法。使用时要格外小心。

是否可以调用dynamic“数据类型”取决于“数据类型”的含义。Dart 语言规范不使用任何术语“数据类型”。