在 Dart 中使用带有构造函数的 Setter

Posted

技术标签:

【中文标题】在 Dart 中使用带有构造函数的 Setter【英文标题】:Using Setters with Constructors in Dart 【发布时间】:2021-01-05 22:25:46 【问题描述】:

如何在 Dart 的默认构造函数中使用私有实例变量的 setter?

给定示例类:

class A 
  String name;
  int _age;

  int get age => _age;

  set age(age) 
    _age = age ?? 0;
  

  A(this.name, this._age);

如何使用这个构造函数来执行set age() 函数?除了使用factory 之外,还有其他方法吗?我想做这样的事情

A(this.name, newAge): age = newAge;

但我得到一个错误,迫使我只能从构造函数中设置实例变量,这让我只是复制了 setter:

A(this.name, newAge): _age = newAge ?? 0;

我是否遗漏了什么,或者这对飞镖来说是不可能的?

【问题讨论】:

【参考方案1】:

构造函数的初始化列表只能用于初始化成员(或调用基类构造函数)。 (另外,当初始化列表执行时,this 还无效,所以你不能访问任何成员。)

如果你想做其他类型的初始化工作,你可以在构造函数 body 中做,此时对象被认为是充分构造的,this 有效:

A(this.name, int newAge) 
  age = newAge;

另见:

Difference between assigning the values in parameter list and initialiser list,这解释了为什么这仅对对象初始化的后期阶段有效。 https://***.com/a/64548861/ 了解初始化成员的不同方式之间的各种差异,以及不同方式很重要的示例。

【讨论】:

以上是关于在 Dart 中使用带有构造函数的 Setter的主要内容,如果未能解决你的问题,请参考以下文章

掌握 Dart 的面向对象基础

Dart语法篇之面向对象基础

带有向量的类构造函数中的析构函数调用

Dart 初始化最终变量

Dart中的类和单例模式

Python属性在构造函数中设置值时不使用setter