美文网首页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 - 类(使用类成员、使用构造函数、获取对象类型)

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