在 Dart 中,getter 和 setter 是用于访问和修改对象属性的特殊方法。它们可以让你在读取或设置属性时执行额外的操作,例如数据验证、计算等。
定义 Getter 和 Setter
定义 Getter
Getter 方法用于获取对象的属性值。定义一个 getter 的语法如下:
class MyClass { // 属性 int _myProperty; // Getter int get myProperty => _myProperty; }
这里,_myProperty
是私有属性,通过 getter myProperty
来访问它。
定义 Setter
Setter 方法用于设置对象的属性值。定义一个 setter 的语法如下:
-- -------------------- ---- ------- ----- ------- - -- -- --- ------------ -- ------ --- --- ---------- -- ------------ -- ------ --- -------------- ------ - ----------- - ------ - -
这里,通过 setter myProperty
来设置 _myProperty
的值。
使用 Getter 和 Setter
你可以像使用普通属性一样使用 getter 和 setter。下面是一个例子:
-- -------------------- ---- ------- ---- ------ - --- --- - ---------- -- -- ------ ---------------------- -- --- ---- -- -- ------ -------------- - --- ---------------------- -- --- -- -
自定义逻辑
除了简单的赋值操作,你还可以在 getter 和 setter 中添加自定义逻辑。例如,你可以在设置属性值时进行数据验证:
-- -------------------- ---- ------- ----- ------- - --- ------------ --- --- ---------- -- ------------ --- -------------- ------ - -- ------ - -- - ----- -------------------- ---- -- --------------- - ----------- - ------ - - ---- ------ - --- --- - ---------- --- - -------------- - --- -- ---- - ----- --- - --------- -- --- ----- ---- -- ------------ - -------------- - --- ---------------------- -- --- -- -
在这个例子中,如果尝试将 myProperty
设置为负数,则会抛出异常。
复合属性
有时候你可能需要根据其他属性来计算某个属性的值。在这种情况下,你可以使用 getter 来返回这个复合值:
-- -------------------- ---- ------- ----- --------- - ------ ------ ------ ------- --------------------- ------------- -- ------ ---- ------ --- ---- -- ----- - ------- - ---- ------ - --- ---- - ------------ --- ----------------- -- --- ---- -
Getter 和 Setter 的组合
你也可以在同一个类中同时定义 getter 和 setter,以实现更复杂的属性管理逻辑:
-- -------------------- ---- ------- ----- ------ - ------ ------ -- ------ ------ --- ---- -- ------ -- ------ --- ----------- ------ - -- --------------- - ----- ------------------- ------ -- -------- - ----- - ------ - - ---- ------ - --- ------ - --------- --- - ----------- - --- -- ---- - ----- --- - --------- -- --- ---- ------ -- ----- - ----------- - -------- ------------------- -- --- ----- -
在这个例子中,通过 getter 和 setter 实现了对 name
属性的安全管理。
总结
通过 getter 和 setter,你可以更加灵活地管理和控制对象的属性。这不仅可以使代码更安全、更易维护,还能帮助你在属性发生变化时执行一些必要的操作。希望本章的内容能够帮助你更好地理解和使用 Dart 中的 getter 和 setter。