美文网首页Dart
Dart - 类(使用类成员、使用构造函数、获取对象类型)

Dart - 类(使用类成员、使用构造函数、获取对象类型)

作者: LouisXWB | 来源:发表于2019-12-22 20:52 被阅读0次

Dart 的类跟其他语言类似,其他特殊的是它是支持基于 mixin 继承机制的面向对象语言,所有对象都是一个类的实例,而所有的类都继承自 Object 类。基于 mixin 的继承 意味着每个除 Object 类之外的类都只有一个超类,一个类的代码可以在其它多个类继承中重复使用。 Extension 方法是一种在不更改类或创建子类的情况下向类添加功能的方式。

关于mixinextension后面会更详细地介绍。

使用类成员

对象的 成员函数和数据(即 方法 和 实例变量)组成。方法的调用要通过对象来完成,这种方式可以访问对象的函数和数据。

使用(.)来访问对象的实例变量或方法:

var p = Point(2, 2);

// 为实例变量 y 赋值。
p.y = 3;

// 获取 y 的值。
assert(p.y == 3);

// 调用变量 p 的 distanceTo() 方法。
num distance = p.distanceTo(Point(4, 4));

使用 ?.代替 .可以避免因为左边表达式为 null 而导致的问题:

// 如果 p 为非空则将其属性 y 的值设为 4
p?.y = 4;

使用构造函数

可以使用 构造函数 来创建一个对象。构造函数的命名方式可以为 类名类名.标识符 的形式。例如下述代码分别使用 Point()Point.fromJson()两种构造器创建了Point对象:

var p1 = Point(2, 2);
var p2 = Point.fromJson({'x': 1, 'y': 2});

以下代码具有相同的效果,但是构造函数名前面的的 new 关键字是可选的:

var p1 = new Point(2, 2);
var p2 = new Point.fromJson({'x': 1, 'y': 2});

版本提示:
"从 Dart 2 开始,new 关键字是可选的。"

一些类提供了常量构造函数。使用常量构造函数,在构造函数名之前加 const 关键字,来创建编译时常量时:

var p = const ImmutablePoint(2, 2);

重点提示📝:两个使用相同构造函数相同参数值构造的编译时常量是同一个对象

var a = const ImmutablePoint(1, 1);
var b = const ImmutablePoint(1, 1);

assert(identical(a, b)); // 它们是同一个实例 (They are the same instance!)

根据使用 常量上下文 的场景,你可以省略掉构造函数或字面量前的 const关键字。例如下面的例子中我们创建了一个常量 Map:

// 只需要一个 const 关键字,其它的则会隐式地根据上下文进行关联。
const pointAndLine = {
  'point': [ImmutablePoint(0, 0)],
  'line': [ImmutablePoint(1, 10), ImmutablePoint(-2, 11)],
};

但是如果无法根据上下文判断是否可以省略 cosnt,则不能省略掉 const 关键字,否则将会创建一个 非常量对象 例如:

var a = const ImmutablePoint(1, 1); // 创建一个常量 (Creates a constant)
var b = ImmutablePoint(1, 1); // 不会创建一个常量 (Does NOT create a constant)

assert(!identical(a, b)); // 这两变量并不相同 (NOT the same instance!)

获取对象的类型

可以使用 Object 对象的 runtimeType 属性在运行时获取一个对象的类型,该对象类型是 Type 的实例。

print('The type of a is ${a.runtimeType}');

相关文章

  • Dart - 类(使用类成员、使用构造函数、获取对象类型)

    Dart 的类跟其他语言类似,其他特殊的是它是支持基于 mixin 继承机制的面向对象语言,所有对象都是一个类的实...

  • 2020-07-04【反射】

    类加载 类加载器 反射概述 获取Class类的对象 反射获取构造方法并使用 反射获取成员遍历并使用 反射获取成员方...

  • Dart 语法(二)

    类和对象 使用class关键字声明类 使用new、构造函数创建一个对象 所有对象继承自Object Dart中默认...

  • Dart2 class & object

    Dart2 类与对象 类和对象 class 关键字声明一个类 创建对象 使用 new + 构造函数() 所有的对象...

  • Flutter -- 2.面向对象

    一. 类与对象 使用class关键字声明一个类 可以使用new跟上构造函数 所有的对象都继承Object Dart...

  • C++类型转换函数与类型转换构造函数

    类型转换函数 将一个类型转换成另一个类型的函数。 类型转换构造函数 使用另外的类作为构造函数参数来构造类的对象,这...

  • Dart 面向对象相关知识点

    Dart 中的类和对象 使用 class 关键字声明一个类使用 new 加上构造函数来创建一个新的对象所有对象对继...

  • Kotlin继承与多态 (1)继承

    调用父类构造函数使用主构造函数使用此构造函数重载使用参数默认值调用构造函数重写成员属性和函数重写成员属性重写成员函...

  • JS设计模式之构造函数模式1

    关键词:类,实例,原型 构造函数定义: 构造函数用于创建特定类型的对象——不仅声明了使用的对象,构造函数还可以接受...

  • Dart(6)类

    类的定义和使用,构造函数,对象的类型 记住构造函数是不能被继承的,这将意味着子类不能继承父类的命名式构造函数,如果...

网友评论

    本文标题:Dart - 类(使用类成员、使用构造函数、获取对象类型)

    本文链接:https://www.haomeiwen.com/subject/vkwwnctx.html