博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
9.Dart中的类有何不同?
阅读量:6321 次
发布时间:2019-06-22

本文共 2132 字,大约阅读时间需要 7 分钟。

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}');复制代码

如何找到我?

转载于:https://juejin.im/post/5c90c214e51d4579cc42dba0

你可能感兴趣的文章
6 款最好的免费 Python IDE
查看>>
《众妙之门——网站UI设计之道(修订版)》一1.2 可视界面设计的工具箱
查看>>
《渐进增强——跨平台用户体验设计》一1.6 适应未知的设备
查看>>
如何设置一个基本的OpenLDAP Server
查看>>
在 Linux 中修改 MySQL 或 MariaDB 的 Root 密码
查看>>
多级缓存:支撑海量读服务的瑞士军刀
查看>>
第十二章 Python文件操作
查看>>
Alibaba Data Center Brain——阿里基础设施智能化之实践
查看>>
CDN的基本工作过程
查看>>
【云栖大会】阿里云推出云通信方案 具备短信、语音、流量、推送等7大服务...
查看>>
【D3.js 学习总结】21、D3交互事件
查看>>
maven 打包 常见错误问题
查看>>
How to troubleshoot slow queries in RDS for SQL Server
查看>>
听说阿里准备建立海外第一个eWTP“试验区”?
查看>>
hbase源码系列(八)从Snapshot恢复表
查看>>
【Spark Summit East 2017】基于SparkR的可伸缩数据科学
查看>>
78期:ATF走进清华,阿里技术天团畅谈技术梦想
查看>>
OpenSSL生成根证书CA及签发子证书
查看>>
MySQL · 特性分析 · 优化器 MRR & BKA
查看>>
表现层模式-MVC
查看>>