美文网首页
Dart基础语法<七> 类(上)

Dart基础语法<七> 类(上)

作者: 果汁味Studio | 来源:发表于2021-01-02 19:43 被阅读0次

Dart 作为一门面向对象的编程语言,每个对象都是一个类的实例,所有的类都继承于 Object类。
本节主要记录一下Dart中关于类的构造函数

  • 构造函数语法糖
  • 命名构造函数
  • 参数初始化列表
  • 重定向构造函数
  • 常量构造函数
  • 工厂构造函数
构造函数语法糖

实际写法如下,省去java中类似this.name = name;的方法体

class Person {
  String name;
  int age;
  String sex;

  Person(this.name, this.age, this.sex);
}

void main() {
  Person person = new Person("name", 20, "男");
}
命名构造函数

​由于Dart 不支持类似Person(this.name); Person(this.name, this.age);的方法重载,而实际开发中经常存在一个类需要多个构造函数实例化,命名构造函数就应运而生了。实际使用就是在构造方法后添加. + 方法名

class Person {
  String name;
  int age;
  String sex;

  Person(this.name, this.age, this.sex);
  Person.nameAndAge(this.name, this.age);
  Person.nameAndSex(this.name, this.sex);
}

void main() {
  Person person1 = new Person("name", 20, "男");
  Person person2 = new Person.nameAndAge("name", 20);
  Person person3 = new Person.nameAndSex("name", "男");
}
参数初始化列表

在构造函数函数体执行之前,会首先执行初始化列表,适合用来设置 final变量的值。

    Person.nameAndSex()
      : name = "name",
        sex = "男"{}

  Person.fromMap(Map map)
      : name = map['name'],
        age = map['age'],
        sex = map['sex']{}
重定向构造函数

实际开发中可能存在:一个构造函数调用类中的其他构造函数(在Java中就是 this(...))。 一个重定向构造函数是没有代码的,在构造函数声明后,使用 : 调用其他构造函数。

class Person {
  String name;
  int age;
  String sex;

  Person(this.name, this.age, this.sex);

  Person.nameAndAge(String name, int age) : this(name, age, null);

  Person.name(String name) : this.nameAndAge(name, null);
}
常量构造函数

实际开发中,有些状态不变的对象需要重复使用(指向同块内存区域),可以把这种对象定义为编译时常量。用法:定义一个 const 构造函数, 并且声明类的所有变量为 final

class ConstantObject {
  final int _x;
  final int _y;

  const ConstantObject(this._x, this._y);

  ConstantObject.xy(this._x, this._y);
}

void main() {
  ConstantObject o1 = const ConstantObject(0, 0);
  ConstantObject o2 = new ConstantObject(1, 1);
  ConstantObject o3 = new ConstantObject(0, 0);
  ConstantObject o4 = const ConstantObject(0, 0);
  ConstantObject o5 = new ConstantObject.xy(0, 0);

  print(o1==o2);
  print(o1==o3);
  print(o1==o4);
  print(o1==o5);
}

o1o2 o3 o5为不同对象,与 o4同一对象,故
运行结果为false false true false

工厂构造函数
  • 使用factory 关键词修饰的构造函数即为工厂构造函数。
  • 工厂构造函数无法访问 this
  • 这个构造函数不必创建类的新实例。例如,一个工厂构造函数可能从缓存中获取一个实例并返回,或者返回一个子类型的实例。
class Parent {
  static Parent _instance;

  factory Parent.getInstance() {
    if (null == _instance) {
      _instance = new Parent._newInstance();
    }
    return _instance;
  }

  Parent._newInstance();
}
class Parent1 {
  static Parent1 _instance;

  static Parent1 getInstance() {
    if (null == _instance) {
      _instance = new Parent1._newInstance();
    }
    return _instance;
  }

  Parent1._newInstance();
}
  • 对比以上两个单例模式写法,实现效果是一致的,区别是factory修饰的是构造函数,需要返回一个实例,而static是静态方法开发中可以灵活配置返回值。

相关文章

  • Dart基础语法<七> 类(上)

    Dart 作为一门面向对象的编程语言,每个对象都是一个类的实例,所有的类都继承于 Object类。本节主要记录一下...

  • dart入门潜修系列教程

    dart入门潜修基础篇之基本语法和内置类型dart入门潜修基础篇之方法dart入门潜修基础篇之操作符dart入门潜...

  • Flutter笔记--Dart任务调度

    dart异步代码是如何执行的 在Dart基础语法一文中我们了解了dart的一些基础语法,包括异步代码的使用。在da...

  • Flutter学习笔记

    Dart基础语法 一、选择开发工具 首先需要安装Dart SDK(https://www.dart-china.o...

  • Dart基础语法<八> 类(中)

    本节主要记录一下Dart中关于类的使用 Getters 和 Setters 可覆写的操作符 抽象类 接口 Gett...

  • Dart基础语法<九> 类(下)

    本节主要记录一下Dart中关于类的使用 可调用的类 混合Mixins 可调用的类 如果 Dart 类实现了 cal...

  • Flutter一:Flutter简介、环境配置

    以项目驱动,中间穿插各个组件 第一天:Flutter简介、环境搭建、Dart语法基础一 第二天:Dart语法基础二...

  • Flutter 代码规范整理

    Dart 语法简介 Flutter是使用Dart语言开发的。Dart语言是基于类的纯面向对象语言。Dart 中的所...

  • Flutter-Dart基础语法入门

    Dart语法基础 Dart语言简介 Dart是Google推出的一门编程语言,最初是希望取代Javascript运...

  • dart语法7-泛型

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

网友评论

      本文标题:Dart基础语法<七> 类(上)

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