当前位置: 首页 > news >正文

dart 学习 之 Getters and setters

前言

任何需要对属性进行更多控制而不是允许简单字段访问的时候,你都可以自定义 getter 和 setter。

正文

讲解

Getter(获取器)和Setter(设置器)是面向对象编程中用于控制对类属性访问的特殊方法。Getter用于获取属性的值,而Setter用于设置属性的值。它们允许你在属性访问过程中添加额外的逻辑,例如验证输入、计算属性或记录属性访问。在你提供的示例中,你展示了如何在Dart编程语言中定义Getter和Setter。

首先,让我们来看看Getter的示例:

class MyClass {int _aProperty = 0;// Getter for aPropertyint get aProperty => _aProperty;
}

在上述示例中,我们创建了一个名为_aProperty的私有属性,并定义了一个名为aProperty的Getter。Getter的定义方式是在属性名称前面添加get关键字,后跟Getter的名称。在Getter内部,我们简单地返回了_aProperty的值。这允许外部代码通过myInstance.aProperty来访问_aProperty的值,就像访问普通属性一样,但实际上是通过Getter方法。

接下来,让我们来看看Setter的示例:

class MyClass {int _aProperty = 0;// Setter for aPropertyset aProperty(int value) {if (value >= 0) {_aProperty = value;}}
}

在这个示例中,我们定义了一个名为aProperty的Setter。Setter的定义方式是在属性名称前面添加set关键字,后跟Setter的名称。在Setter内部,我们可以添加额外的逻辑以控制属性的赋值。在这里,我们检查传入的值是否大于等于0,如果是,则将其赋值给_aProperty。这意味着外部代码可以通过myInstance.aProperty = newValue来设置_aProperty的值,但Setter允许我们在赋值时添加验证或其他逻辑。

总结一下,Getter和Setter是用于控制属性访问的特殊方法,允许你在获取和设置属性值时添加额外的逻辑。Getter用于获取属性的值,Setter用于设置属性的值。这些机制有助于封装属性并确保属性值的合法性。在示例中,你展示了如何在Dart中定义Getter和Setter,但这些概念在许多其他面向对象编程语言中也是通用的。

练习

想象你有一个购物车类,其中有一个私有的 List 类型的 prices 属性。添加以下内容:

一个名为 total 的 getter,用于返回总价格。

只要新列表不包含任何负价格, setter 就会用新的列表替换列表(在这种情况下,setter 应该抛出 InvalidPriceException)。

答案:

class InvalidPriceException {}class ShoppingCart {List<double> _prices = [];double get total => _prices.fold(0, (e, t) => e + t);set prices(List<double> value) {if (value.any((p) => p < 0)) {throw InvalidPriceException();}_prices = value;}
}
http://www.lryc.cn/news/167382.html

相关文章:

  • 使用融云 CallPlus SDK,一小时实现一款 1V1 视频应用
  • Redis Part1
  • 代理HTTP使用不当会出现哪些问题?如何正确使用代理服务?
  • 利用芯片74hc165为单片机增加输入扩展端口proteus仿真arduino
  • docker真实IP解决
  • Linux 内存泄漏检测的基本原理
  • Ubuntu下Nginx配置ModSecurity详细思路及过程
  • 入职美团近三个月,闲聊几句
  • setInterval倒计时切换页面后不准
  • 信息安全三级概述
  • 深入JVM:探索Java虚拟机
  • 【计算机网络】 RTT和RTO
  • Zabbix监控组件及流程
  • Type-C协议Ver2.0(学习笔记)
  • 智慧工地:实现作业区域安全管控
  • 【Unity插件】实现多人在线游戏——Mirror插件的使用介绍
  • GeoSOS-FLUS未来土地利用变化情景模拟模型
  • IntelliJ IDEA使用_Debug操作
  • 市场的新宠:4G智能手表
  • Pytorch Advanced(一) Generative Adversarial Networks
  • Python实操如何去除EXCEL表格中的公式并保留原有的数值
  • MFC串口通信控件MSCOMM32.OCX的安装注册
  • 27.顺序表练习题目(1)(2023王道数据结构2.2.3前8题)
  • Unity VideoPlayer 指定位置开始播放
  • 美团多场景建模的探索与实践
  • 第11篇:ESP32vscode_platformio_idf框架helloworld点亮LED
  • React中的页面跳转方式详解
  • Golang代码漏洞扫描工具介绍——govulncheck
  • 第31章_瑞萨MCU零基础入门系列教程之WIFI蓝牙模块驱动实验
  • arkworks工具栈概览