在 Dart 中,getter 和 setter 是用于访问和修改对象属性的特殊方法。它们可以让你在读取或设置属性时执行额外的操作,例如数据验证、计算等。
定义 Getter 和 Setter
定义 Getter
Getter 方法用于获取对象的属性值。定义一个 getter 的语法如下:
class MyClass { // 属性 int _myProperty; // Getter int get myProperty => _myProperty; }
这里,_myProperty
是私有属性,通过 getter myProperty
来访问它。
定义 Setter
Setter 方法用于设置对象的属性值。定义一个 setter 的语法如下:
// javascriptcn.com 代码示例 class MyClass { // 属性 int _myProperty; // Getter int get myProperty => _myProperty; // Setter set myProperty(int value) { _myProperty = value; } }
这里,通过 setter myProperty
来设置 _myProperty
的值。
使用 Getter 和 Setter
你可以像使用普通属性一样使用 getter 和 setter。下面是一个例子:
// javascriptcn.com 代码示例 void main() { var obj = MyClass(); // 使用 getter print(obj.myProperty); // 输出: null // 使用 setter obj.myProperty = 42; print(obj.myProperty); // 输出: 42 }
自定义逻辑
除了简单的赋值操作,你还可以在 getter 和 setter 中添加自定义逻辑。例如,你可以在设置属性值时进行数据验证:
// javascriptcn.com 代码示例 class MyClass { int _myProperty; int get myProperty => _myProperty; set myProperty(int value) { if (value < 0) { throw ArgumentError('Value must be non-negative'); } _myProperty = value; } } void main() { var obj = MyClass(); try { obj.myProperty = -1; // 抛出异常 } catch (e) { print(e); // 输出: Value must be non-negative } obj.myProperty = 42; print(obj.myProperty); // 输出: 42 }
在这个例子中,如果尝试将 myProperty
设置为负数,则会抛出异常。
复合属性
有时候你可能需要根据其他属性来计算某个属性的值。在这种情况下,你可以使用 getter 来返回这个复合值:
// javascriptcn.com 代码示例 class Rectangle { double width; double height; Rectangle(this.width, this.height); // Getter 返回面积 double get area => width * height; } void main() { var rect = Rectangle(4, 5); print(rect.area); // 输出: 20.0 }
Getter 和 Setter 的组合
你也可以在同一个类中同时定义 getter 和 setter,以实现更复杂的属性管理逻辑:
// javascriptcn.com 代码示例 class Person { String _name; // Getter String get name => _name; // Setter set name(String value) { if (value.isEmpty) { throw ArgumentError('Name cannot be empty'); } _name = value; } } void main() { var person = Person(); try { person.name = ''; // 抛出异常 } catch (e) { print(e); // 输出: Name cannot be empty } person.name = 'Alice'; print(person.name); // 输出: Alice }
在这个例子中,通过 getter 和 setter 实现了对 name
属性的安全管理。
总结
通过 getter 和 setter,你可以更加灵活地管理和控制对象的属性。这不仅可以使代码更安全、更易维护,还能帮助你在属性发生变化时执行一些必要的操作。希望本章的内容能够帮助你更好地理解和使用 Dart 中的 getter 和 setter。