Dart 使用 class 来定义一个类。github
class Point{
var x;
var y;
Point(x, y){
this.x = x;
this.y = y;
}
}
复制代码
在 Dart 中,若是一个类没有显示的定义默认的构造函数,会默认有一个空的构造函数。安全
上面的代码中,已经定义了一个默认构造函数了,若是须要定义新的构造函数,须要经过以下方式:bash
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 容许这样书写一个默认构造函数。函数
建立一个类对象的方式以下:post
var p1 = Point(1, 1);
var p2 = new Point(1, 1);
复制代码
Dart 同时支持以上两种建立一个类对象的方式。ui
new
关键字从 Dart 2.0
开始支持。this
在 Dart 中,类全部的属性和函数默认都是对外可见的。spa
var p1 = Point(1, 1);
print(p1.y);
>>>
1
p1.y = 5;
print(p1.y);
>>>
5
复制代码
Dart 在调用对象属性前,支持先检查对象是否为 null。3d
若是不为 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
复制代码
在 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}');复制代码