Dart笔记:Dart 语言中的存取器及其用法解析

news/2024/11/30 9:30:27/
dart
Dart 语言中的存取器

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/131242679


【简介】:本文介绍 Dart 语言中存取器的用法。


1. 概述

1.1 什么是存取器

存取器(Accessors)是 Dart 语言中一种特殊的方法,它们允许您在访问和修改对象的属性时执行一些操作。存取器主要分为两种:getter(获取器)和 setter(设置器)。

1.2 存取器的类型

从功能上存取器分为“取”和“存”这两个功能,对应有getter和setter这两个类别:

存取器类型描述
getter用于获取对象属性值的方法。
setter用于设置对象属性值的方法。

1.3 为什么需要存取器

我们可以从以下方面来介绍为什么有的时候我们需要用到存储器:

项目描述
数据封装存取器可以帮助实现数据封装,即将对象的属性和实现细节隐藏起来,只暴露一组公共接口。这样,外部代码无法直接访问和修改对象的内部状态,从而保护了对象的完整性。
验证和操作数据存取器允许您在获取或设置属性值时执行一些操作,例如验证数据是否有效、执行计算或触发其他操作。

2. Dart 存取器的语法格式

2.1 getter 语法

在一个类中,getter 方法是使用 get 关键字进行声明的,它不接收任何参数:

Type get propertyName {  // 返回属性值}

请参考 2.2 setter 语法 小节的示例。

2.2 setter 语法

在一个类中,getter 方法是使用 set 关键字进行声明的,需要接收一个参数,作为设置的值:

set propertyName(Type value) {  // 设置属性值}

例如:

import 'package:dio/dio.dart';
import 'package:dio/io.dart';class ApiService {Dio _dio = Dio();int _connectTimeout = 5000; int _receiveTimeout = 3000;bool _useProxy = false; // 默认不使用代理String _proxyUrl = "";  // 代理 URL/// 获取当前是否使用代理bool get useProxy => _useProxy;/// 设置是否使用代理set useProxy(bool value) {_useProxy = value;}/// 获取当前代理 URLString get proxyUrl => _proxyUrl;/// 设置代理 URLset proxyUrl(String value) {_proxyUrl = value;}// ...其它方法}

3. 存取器与访问权限控制

和 dart 中的其它方法一样,存取器也可以定义为共有或者私有访问权限,其中你可以对比 私有字段 和 公共存取器 的区别:

项目描述
私有字段在 Dart 中,以 _ 开头的字段和方法默认为私有。通过结合私有字段和公共存取器,您可以实现对对象属性的访问权限控制。
公共存取器公共存取器是指没有前缀 _ 的 getter 和 setter 方法。通过公共存取器,您可以控制外部代码如何访问和修改对象的属性。

4. 存取器进阶

4.1 自动存取器

Dart 支持自动存取器,它允许您为一个属性自动生成 getter 和 setter 方法,而无需显式定义。要使用自动存取器,只需将属性声明为公共(不以 _ 开头)即可。

例如:

class Person {// 自动存取器String name;
}void main() {var person = Person();person.name = "Jack"; // 自动调用 setterprint(person.name); // 自动调用 getter
}

4.2 存取器与继承

在继承中,子类可以覆盖父类的存取器。这允许您在子类中修改或扩展父类属性的行为。覆盖存取器时,需要使用 @override 注解,并确保覆盖后的存取器具有与父类相同的签名。

例如:

class Animal {String _name;String get name => _name;set name(String value) {_name = value;}
}class Dog extends Animal {set name(String value) {if (value.isEmpty) {throw ArgumentError("名字不能为空!");}super.name = value;}
}void main() {var dog = Dog();dog.name = "Trump"; // 调用子类的 setterprint(dog.name); // 调用父类的 getter
}

在上面的示例中,Dog 类继承自 Animal 类,并覆盖了父类的 name setter。当为 Dog 对象设置名称时,将调用子类的 setter 方法,该方法会检查名称是否为空,然后调用父类的 setter 方法。当获取 Dog 对象的名称时,将调用父类的 getter 方法。


http://www.ppmy.cn/news/416254.html

相关文章

Unity3D:Scene 视图摄像机

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 Scene 视图摄像机 摄像机设置菜单包含用于配置 Scene 视图摄像机的选项。这些调整不会影响带有摄像机组件的游戏对象上的设置。 要访问摄像机设置菜单,请单击 Scene 视…

第二届BSN全球技术创新发展峰会在武汉成功举行

6月9日,由湖北省人民政府指导,湖北省发展改革委、国家信息中心联合主办,中国移动、中国电信、中国联通、武汉市江汉区人民政府、区块链服务网络(BSN)发展联盟、湖北省楚天云公司承办的第二届区块链服务网络&#xff08…

Python期末总结

Python期末总结 第二章 Python基础 2.1代码格式 良好的代码格式可提升代码的可读性 注释 单行注释以“#” 开头,用于说明当前行或之后代码的功能。单行注释既可以单独占一行,也可以位于标识的代码之后,与标识的代码共占一行。 # 第一个…

Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

全文目录 先导知识学习目标:2.1 代码格式2.1.1 注释2.1.2 缩进2.1.3 语句换行 2.2 标识符和关键字2.2.1 标识符2.2.2 关键字 2.3 变量和数据类型2.3.1 变量变量的作用变量的命名习惯变量的使用 2.3.2 数据类型2.3.3 变量的输入与输出 2.4 实训案例2.4.1 打印购物小票…

菜鸟成长手册:八大品牌内存真伪巧识别

经常逛电脑市场的朋友会有这种体会,那就是如今市场中的内存品牌非常多,大大小小细数起来也能有20多个品牌了吧,大家在选购的时候也是往往挑花了眼。除了内存品牌差异外,我发现“内存打假”已经成为广大网友们非常关心的一个问题。…

电脑硬件详解:内存的作用和选购

内存对于整机性能有着很重要的影响,一是内存关乎着一台电脑的速度。二来内存也是电脑升级中最好升级的产品。买一根插上去,即插即用,方便快捷。那么,内存真正的作用又是什么呢? 内存的作用 攒机时内存非常重要&…

五虎争锋!超值DDR2笔记本内存导购

笔记本内存选购指南: NAPA笔记本入市已有数月之余,对于采用CORE DUO处理器的机型来说,1GB容量内存必不可少,因为这样可以使双核处理器的威力不至被埋没。然而目前绝大多数笔记本电脑仍标配512MB内存,甚至部分还采用256…

怎么看内存的类型?

整个DDR SDRAM颗粒的编号,一共是由14组数字或字母组成,他们分别代表内存的一个重要参数,了解了他们,就等于了解了现代内存。 颗粒编号解释如下: 1. HY是HYNIX的简称,代表着该颗粒是现代制造的产…