Dart 构造函数

构造函数概念

构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

在 Dart 中,构造函数是与类名称同名的函数;

普通构造函数示例

class Person {
  late String name;
  late int age;
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  void Say() {
    print("My name is ${this.name} and I am ${this.age} years old.");
  }
}

void main(List<String> args) {
  Person person = new Person("John", 25);
  person.Say();
}

Dart 构造函数语法糖

Dart 提供了构造函数语法糖来简化构造函数 :

// 可以将
Person(String name, int age) {
    this.name = name;
    this.age = age;
}
// 简化为
Person(this.name, this.age);

Dart 命名参数构造函数

和函数名称参数一样,构造函数也可以为命名参数,被称为命名构造函数。

class Person {
  late String name;
  late int age;
  Person({required this.name, required this.age});
  void Say() {
    print("My name is ${this.name} and I am ${this.age} years old.");
  }
}

void main(List<String> args) {
  Person person = new Person(name: "lesscode", age: 20);
  person.Say();
}

Dart 命名构造函数

默认构造函数与类名称相同,命名构造函数可以为类提供多个不同的构造器,语法 :

class 类名称 {
    // 普通构造器
    与类名称同名();
    // 命名构造器
    类名称同名.自定义名称();
}

示例

class Person {
  String name;
  int age;
  Person({required this.name, required this.age});
  Person.fromJson(Map<String, dynamic> json)
      : name = json["name"],
        age = json["age"];
  void Say() {
    print("My name is ${this.name} and I am ${this.age} years old.");
  }
}

void main(List<String> args) {
  Map<String, dynamic> map = {"name": "John", "age": 25};
  Person person = Person.fromJson(map);
  person.Say();
}