类对象和属性变化



所以我最近开始学习飞镖,我发现了一些有趣的东西。

为什么不用构造函数和getter/setter就能得到相同的结果呢?(至少当用于基本的事情时)。
class v1{
var name;
int age;

v1(this.name, this.age);

info(){
print("my name is $name and i am $age");
}
}
class v2{
var name = "bash";
int age = 100;

info(){
print("my name is $name and i am $age");
}
}
class v3{
var namee;
int agee;

String get name => namee;
int get age => agee;

set name(String name) => this.namee = name;
set age(int age) => this.agee = age;

info(){
print("my name is $name and i am $age");
}
}

void main(){
var x = v1("bash", 100);
x.info(); //my name is bash am i am 100

var z = v2();
var Z = v2();
Z.name = "vert";
Z.age = 20;
z.info(); //my name is bash and i am 100
Z.info(); //my name is vert and i am 100

var y = v3();
y.name = "rizz";
y.age = 40;
y.info(); //my name is rizz and i am 40
}

这是你的类的一个更正确的版本:

class User {
final bool _isMale;
String _name;
int _age;
User(this._isMale, this._name, this._age);
bool isMale => _isMale;
String get name => _name;
int get age => _age;
set name(String name) {
// Sometimes you may want to update other properties here.
// For example:
// _isUpdated = true;
_name = name;
}
set age(int age) {
_age = age;
}
void info() {
print("my name is $name and i am $age");
}
}

当你想给类字段赋初始值时,构造函数很有用。如果您需要分配final字段,它们是必不可少的,因为它们仅在类初始化时可分配(参见_isMale字段)。

当你想要更新其他字段和正在被修改的字段时,Setters很有用。

getter保护内部状态不被外部修改。在此例中,没有人可以修改_isMale字段。

除非万不得已,你不需要使用getter和setter。

如果需要将数据存储在私有字段中,或者想在保存或返回值时修改数据,则可以使用getter和setter。

class Abc {
String _field;
String _otherField;
String anotherField; // No getters and setters required for this.
String get field => _field;
set field(String field) => _field = field;
String get otherField => "The value of otherField is: " + _otherField;
set otherField(String otherField) => _otherField = "[String] " + otherField;
}

对于构造函数,使用它们来用自定义值初始化对象。当需要处理不可变对象(使用final变量)时,必须使用构造函数来设置它们的初始值。您还可以在存储传入值之前根据需要修改传入值,

class Def {
final field; // Dart generates getters for this field, but it's value can't be modified once the object is instantiated.
final _otherField; // No getters for this.
Def(String field, String otherField) {
this.field = "[String] $field"
this._otherField = "[String] $otherField"
}
String describeMe() {
return "[Def]: field: $field, _otherField: $_otherField"
}
}

相关内容

  • 没有找到相关文章

最新更新