Dart 语言 getter 和 setter 用法示例

Dart阿木 发布于 2025-06-19 17 次阅读


Dart 语言中 Getter 和 Setter 的用法示例

在 Dart 语言中,getter 和 setter 是用于访问和修改对象私有属性的便捷方式。它们是面向对象编程中封装性的体现,可以保护对象的内部状态不被外部直接访问和修改,从而保证数据的一致性和安全性。本文将围绕 Dart 语言中 getter 和 setter 的用法,通过示例代码进行详细讲解。

在 Dart 中,每个类都可以有自己的成员变量,这些成员变量默认是私有的,即只能在该类的内部被访问。为了从类的外部访问这些私有变量,我们可以使用 getter 和 setter 方法。

Getter

getter 是一种特殊的成员函数,用于获取类的私有变量的值。它的返回类型必须与私有变量的类型相同。

Setter

setter 是另一种特殊的成员函数,用于设置类的私有变量的值。它接受一个参数,该参数的值将被赋给私有变量。

示例代码

以下是一个简单的 Dart 类,其中包含一个私有变量和一个 getter 方法:

dart

class Person {


String _name;

// Getter 方法


String get name => _name;

// 构造函数


Person(this._name);


}


在这个例子中,`_name` 是一个私有变量,只能通过 `name` getter 方法访问。

现在,我们添加一个 setter 方法来修改 `_name` 的值:

dart

class Person {


String _name;

// Getter 方法


String get name => _name;

// Setter 方法


set name(String newName) {


_name = newName;


}

// 构造函数


Person(this._name);


}


现在,我们可以通过 `name` setter 方法来修改 `_name` 的值:

dart

void main() {


Person person = Person("Alice");


print(person.name); // 输出: Alice

person.name = "Bob";


print(person.name); // 输出: Bob


}


使用 getter 和 setter 的好处

1. 封装性:通过使用 getter 和 setter,我们可以控制对私有变量的访问,从而保护对象的内部状态。

2. 数据验证:在 setter 方法中,我们可以添加逻辑来验证输入值,确保数据的有效性。

3. 代码维护:使用 getter 和 setter 可以使代码更加模块化,易于维护。

高级用法

访问器(Accessors)

Dart 还支持使用访问器(accessors)来定义 getter 和 setter,这使得代码更加简洁。

以下是一个使用访问器的示例:

dart

class Person {


String _name;

// 使用访问器定义 getter 和 setter


String get name => _name;


set name(String newName) {


_name = newName;


}

// 构造函数


Person(this._name);


}


访问器属性

Dart 允许使用 `@Accessors` 装饰器来定义 getter 和 setter,这样可以在不直接编写 getter 和 setter 方法的情况下实现它们。

以下是一个使用 `@Accessors` 装饰器的示例:

dart

class Person {


String _name;

// 使用 @Accessors 装饰器定义 getter 和 setter


@Accessors()


String get name => _name;


set name(String newName) {


_name = newName;


}

// 构造函数


Person(this._name);


}


访问器链

Dart 允许使用访问器链来连续调用多个 getter 和 setter 方法。

以下是一个使用访问器链的示例:

dart

class Person {


String _name;


int _age;

// 使用访问器链


String get name => _name;


set name(String newName) {


_name = newName;


}

int get age => _age;


set age(int newAge) {


_age = newAge;


}

// 构造函数


Person(this._name, this._age);


}


总结

在 Dart 语言中,getter 和 setter 是强大的工具,用于封装类的私有变量。通过使用 getter 和 setter,我们可以控制对私有变量的访问,保护对象的内部状态,并添加数据验证逻辑。本文通过示例代码展示了 getter 和 setter 的基本用法、高级用法以及访问器链的使用,希望对读者有所帮助。