Dart 语言中的存取器

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

dartDart 语言中的存取器


作者李俊才 (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 关键字进行声明的,它不接收任何参数:

TypegetpropertyName {  // 返回属性值}

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

2.2 setter 语法

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

setpropertyName(Typevalue) {  // 设置属性值}

例如:

import'package:dio/dio.dart';
import'package:dio/io.dart';
classApiService {
Dio_dio=Dio();
int_connectTimeout=5000; 
int_receiveTimeout=3000;
bool_useProxy=false; // 默认不使用代理String_proxyUrl="";  // 代理 URL/// 获取当前是否使用代理boolgetuseProxy=>_useProxy;
/// 设置是否使用代理setuseProxy(boolvalue) {
_useProxy=value;
  }
/// 获取当前代理 URLStringgetproxyUrl=>_proxyUrl;
/// 设置代理 URLsetproxyUrl(Stringvalue) {
_proxyUrl=value;
  }
// ...其它方法}

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

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

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

4. 存取器进阶

4.1 自动存取器

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

例如:

classPerson {
// 自动存取器Stringname;
}
voidmain() {
varperson=Person();
person.name="Jack"; // 自动调用 setterprint(person.name); // 自动调用 getter}

4.2 存取器与继承

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

例如:

classAnimal {
String_name;
Stringgetname=>_name;
setname(Stringvalue) {
_name=value;
  }
}
classDogextendsAnimal {
@overridesetname(Stringvalue) {
if (value.isEmpty) {
throwArgumentError("名字不能为空!");
    }
super.name=value;
  }
}
voidmain() {
vardog=Dog();
dog.name="Trump"; // 调用子类的 setterprint(dog.name); // 调用父类的 getter}

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

目录
相关文章
N..
|
7月前
|
Dart
Dart语言中类的定义和使用
Dart语言中类的定义和使用
N..
77 0
|
7月前
|
Dart 数据安全/隐私保护
Dart笔记:Dart 语言中的存取器及其用法解析
Dart笔记:Dart 语言中的存取器及其用法解析
84 0
|
存储 缓存 Dart
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
类和成员的可见性,这在基于库或包的开发中非常重要,Dart中提供了工厂构造函数,可以方便的实现单例、缓存实例对象、返回子类等,以及常量构造函数的使用......
309 0
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
N..
|
7月前
|
自然语言处理 Dart 算法
Dart语言中函数的定义
Dart语言中函数的定义
N..
60 0
|
7月前
|
存储 Swift
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
156 1
|
7月前
|
Dart JavaScript 前端开发
dart语言中的常量与变量
dart语言中的常量与变量
63 0
|
存储 Dart JavaScript
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
170 0
Dart语法糖快速理解学习
Dart语法糖是指Dart编程语言中的一些便捷的语法结构,它们可以使代码更加简洁易懂。以下是几个常见的Dart语法糖及其示例代码
Dart语法糖快速理解学习
|
Dart JavaScript 前端开发
dart 语言中的 常量 与 变量
本文介绍 dart 语言中的 常量 与 变量
95 0
|
自然语言处理 Dart 算法
[Flutter]足够入门的Dart语言系列之函数:匿名函数、作用域闭包、类型别名和内联函数类型
函数在Dart中是对象,因此,可以将函数作为参数传递给另一个函数、作为一个'值'赋值给一个变量。下面主要介绍匿名函数、内联函数类型的使用,以及了解下作用域和闭包...
782 0
[Flutter]足够入门的Dart语言系列之函数:匿名函数、作用域闭包、类型别名和内联函数类型