getter和setter如何在Dart中更改属性?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getter和setter如何在Dart中更改属性?相关的知识,希望对你有一定的参考价值。
我在Dart中苦苦寻求getter和setter的概念,我读的越多,我就无法理解其根本目的。以下面的代码为例:
main() {
Car car = new Car();
car.doors = 44;
print(car.doors); // 44
}
class Car {
int doors = 4;
}
后来,我决定将“门”变成一个私有变量,所以我做了以下几点:
main() {
Car car = new Car();
car.doors = 44;
print(car.doors); // 44
}
class Car {
int _doors = 4;
int get doors => _doors;
set doors(int numberOfDoors) => _doors = numberOfDoors;
}
根据代码,_doors
现在是一个私有变量,因此我无法在main()中访问它。然而,通过操纵doors
,我可以间接地改变_doors
的值,这是我认为我想首先通过使它成为私有变量来防止。那么,如果您仍然可以间接操纵它,那么将以前的公共变量变为私有变量的目的是什么?而且,getter和setter如何改变这些变量的属性呢?我试图理解基本概念,因为没有它,我不明白如何或为什么使用getter和setter。
Dart中的实例变量具有隐式getter和setter。因此,对于您的示例代码,它将以完全相同的方式运行,因为您所做的就是从隐式getter和setter更改为显式getter和setter。
显式getter和setter的值是,如果你不想要,你不需要定义它们。例如,我们可以将您的示例更改为仅定义getter:
main() {
Car car = new Car();
print(car.doors); // 4
car.doors = 6; // Won't work since no doors setter is defined
}
class Car {
int _doors = 4;
int get doors => _doors;
}
此外,您还可以在getter或setter中添加额外的逻辑,而不是在隐式getter或setter中:
class Car {
int _doors = 4;
int get doors => _doors;
set doors(int numberOfDoors) {
if(numberOfDoors >= 2 && numberOfDoors <= 6) {
_doors = numberOfDoors;
}
}
}
getter和setter函数允许我们使类看起来具有属性,而不声明显式属性(在您的情况下为_doors
)。可以从其他属性计算属性值。
getter和setter允许我们在获取或设置属性时执行任意代码。
省略setter使属性不可变。
抽象类可以将没有实体的getter和setter声明为必需的类接口的一部分。
以上是关于getter和setter如何在Dart中更改属性?的主要内容,如果未能解决你的问题,请参考以下文章