Dart 使用 class 来定义一个类。
定义一个类
class Point{ var x; var y; Point(x, y){ this.x = x; this.y = y; }}复制代码
在 Dart 中,如果一个类没有显示的定义默认的构造函数,会默认有一个空的构造函数。
上面的代码中,已经定义了一个默认构造函数了,如果需要定义新的构造函数,需要通过如下方式:
class Point{ var x; var y; Point(this.x, this.y); Point.origin(){ x = 0; y = 0; }}var p = Point.origin();复制代码
Point(this.x, this.y)
Dart 允许这样书写一个默认构造函数。
创建一个类对象
创建一个类对象的方式如下:
var p1 = Point(1, 1);var p2 = new Point(1, 1);复制代码
Dart 同时支持以上两种创建一个类对象的方式。
new
关键字从 Dart 2.0
开始支持。
使用类的属性
在 Dart 中,类所有的属性和函数默认都是对外可见的。
var p1 = Point(1, 1);print(p1.y);>>>1p1.y = 5;print(p1.y);>>>5复制代码
空安全 ?.
Dart 在调用对象属性前,支持先检查对象是否为 null。
如果不为 null,才会调用,这和 Kotlin 十分的像。
var p;p?.y = 5;复制代码
级联操作符 ..
先看一个例子:
querySelector('#confirm') // Get an object. ..text = 'Confirm' // Use its members. ..classes.add('important') ..onClick.listen((e) => window.alert('Confirmed!'));复制代码
Dart 支持使用 ..
操作符编写如上的流式语句。
当然前提是,你所调用的函数返回值为 void
。
初始化列表
在执行构造函数体内的表达式前,Dart 支持插入初始化操作。
class Point { final num x; final num y; final num distanceFromOrigin; Point(x, y) : x = x, y = y, distanceFromOrigin = sqrt(x * x + y * y);}import 'dart:math';class Point { final num x; final num y; final num distanceFromOrigin; Point(x, y) : x = x, y = y, distanceFromOrigin = sqrt(x * x + y * y);}main() { var p = new Point(2, 3); print(p.distanceFromOrigin);}>>>3.605551275463989复制代码
get/set 函数
在 Dart 中,get/set 函数支持以下书写方式:
class Rectangle { num left, top, width, height; Rectangle(this.left, this.top, this.width, this.height); num get right => left + width; set right(num value) => left = value - width; num get bottom => top + height; set bottom(num value) => top = value - height;}void main() { var rect = Rectangle(3, 4, 20, 15); assert(rect.left == 3); rect.right = 12; assert(rect.left == -8);}复制代码
类型检测
使用 is
关键字判断一个对象的类型是否属于一个类。
var p = Point(1, 1);print(p is Point);>>>true复制代码
is!
恰好于此相反。
类型转换
Dart 使用 as
关键字来进行强制类型转换。
(emp as Person).firstName = 'Bob';复制代码
获得对象的运行时类型
通过 runtimeType
属性,可以获得一个对象的类型。
print('The type of a is ${a.runtimeType}');复制代码