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

【Flutter学习(1)】Dart访问控制

疑问代码片段:

class _MyHomePageState extends State<MyHomePage> {int _counter = 0;void _incrementCounter() {setState(() {_counter++;});}
}

对Flutter初始文件里下划线的疑问

为什么这里的类和申明的计数器都要在前面加一个下划线?

在 Dart 中,前面加下划线的命名约定是用来表示私有性的。以下是具体原因和作用:

1. 类名前的下划线

_MyHomePageState 类名前的下划线表示这个类是库私有的。
在 Dart 中,文件是通过库(library)组织的。同一个 Dart 文件中的所有代码属于同一个库。如果一个类的名字以 _ 开头,那么它只能在定义它的库中访问,无法从其他库中访问。这是一种封装机制,用来限制类的可见性。

例如:

// 文件: main.dart
class _MyHomePageState {// 只能在 main.dart 中访问
}// 文件: another.dart
import 'main.dart';void main() {var state = _MyHomePageState(); // 错误:无法访问私有类
}

2. 变量名前的下划线

_counter 是一个私有变量,前面的下划线表示它只能在当前类或当前库中访问。
这也是一种封装的方式,用来保护变量不被外部直接修改,确保数据的完整性。

例如:

class _MyHomePageState {int _counter = 0; // 私有变量void _incrementCounter() {_counter++; // 只能在类内部访问}
}void main() {var state = _MyHomePageState();print(state._counter); // 错误:无法访问私有变量
}

3. 为什么要用下划线?

封装性:通过下划线,开发者可以明确哪些类或变量是内部实现细节,哪些是对外暴露的接口。
代码安全性:防止外部代码直接访问或修改内部状态,减少错误的发生。
约定俗成:这是 Dart 的语言特性,遵循这种约定可以让代码更易读、更规范。

总结

类名前的下划线:限制类的访问范围,仅在当前库中可见。
变量名前的下划线:限制变量的访问范围,仅在当前类或库中可见。
这种机制帮助开发者实现更好的封装和模块化设计,是一种良好的编程实践。

Dart访问控制

dart没有类似其他语言的private, public来控制访问范围吗?那其他语言的protected和 无声明方式在dart里如何表示呢?

在 Dart 中,确实没有像其他语言(如 Java、C++)那样的 private、protected 和 public 关键字来控制访问范围。Dart 使用一种更简单的机制,通过命名约定和库(library)级别的访问控制来实现类似的功能。

以下是 Dart 中如何表示这些访问控制的方式:


1. 私有(Private)

在 Dart 中,私有性是通过在标识符前加下划线 _ 来实现的。

  • 作用范围:仅限于当前库(library)。
  • 等价于:其他语言中的 private。
    例如:
class MyClass {int _privateVariable = 42; // 私有变量void _privateMethod() { // 私有方法print('This is private');}
}
  • _privateVariable 和 _privateMethod 只能在当前库中访问,无法从其他库中访问。

2. 公共(Public)

在 Dart 中,默认情况下,所有未加下划线的标识符都是公共的(Public)。

  • 作用范围:可以从任何地方访问。
  • 等价于:其他语言中的 public。
    例如:
class MyClass {int publicVariable = 42; // 公共变量void publicMethod() { // 公共方法print('This is public');}
}
  • publicVariable 和 publicMethod 可以从任何库中访问。

3. 受保护(Protected)

Dart 中没有直接的 protected 关键字,但可以通过继承和库私有性的组合来实现类似的功能。

方法 1:通过继承实现
在 Dart 中,子类可以访问父类的公共成员,但无法访问私有成员(以 _ 开头的成员)。
这类似于其他语言中的 protected,但没有严格的访问限制。

例如:

class Parent {int protectedVariable = 42; // 子类可以访问int _privateVariable = 10; // 子类无法访问
}class Child extends Parent {void printVariables() {print(protectedVariable); // 可以访问// print(_privateVariable); // 错误:无法访问私有变量}
}

方法 2:通过库私有性实现
如果将父类和子类放在同一个库中,可以通过 _ 前缀的私有成员实现类似 protected 的效果,因为库内的所有代码都可以访问私有成员。


4. 无声明方式(包级访问)

Dart 中没有类似 Java 中的“包级访问”权限(即无声明方式)。
但 Dart 的库(library)机制可以实现类似的效果:

  • 在同一个库中的所有代码都可以访问彼此的私有成员。
  • 不同库之间无法访问私有成员。
    例如:
// 文件: lib/my_library.dart
class MyClass {int _privateVariable = 42; // 仅在 my_library.dart 中可见
}// 文件: lib/another_library.dart
import 'my_library.dart';void main() {var myClass = MyClass();// print(myClass._privateVariable); // 错误:无法访问私有变量
}

5. 总结对比

访问控制Dart表示方式等价于其他语言的关键字
私有_private
公共无前缀(默认)public
受保护通过继承或库私有性实现protected
包级访问通过库(library)机制实现无声明方式

Dart 的设计理念是简化访问控制,主要依赖库的作用域和 _ 前缀来实现封装和访问限制。

相关文章:

【Flutter学习(1)】Dart访问控制

疑问代码片段&#xff1a; class _MyHomePageState extends State<MyHomePage> {int _counter 0;void _incrementCounter() {setState(() {_counter;});} }对Flutter初始文件里下划线的疑问 为什么这里的类和申明的计数器都要在前面加一个下划线&#xff1f; 在 Dart 中…...

Day50 单词规律

给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 class Solution {public boolean wordPattern(String p…...

HTTP和HTTPS区别

一&#xff1a;工作原理 HTTP 超文本传输协议。 一种应用层协议&#xff0c;用于在客户端&#xff08;如浏览器&#xff09;和服务器之间传输超文本数据&#xff08;如HTML、图片&#xff09;。 明文传输&#xff0c;无加密。 HTTPS 安全的超文本传输协议。 是HTTP的加密…...

拥抱AI变革机遇,联易融自研供应链金融垂直领域大模型“蜂联 AI”

2025年3月25日&#xff0c;中国领先的供应链金融科技解决方案服务商联易融科技集团&#xff08;09959.HK&#xff0c;以下简称“联易融”&#xff09;发布2024年业绩公告。2024年公司总收入及收益达10.3亿元&#xff0c;同比增长19%&#xff1b;受益于产品结构优化与运营效率改…...

常用数据库

模式的定义于删除 1.定义模式 CREATE SCHEMA [ <模式名> ] AUTHORIZATION < 用户名 >;要创建模式&#xff0c;调用该命令的用户必须拥有数据库管理员权限&#xff0c;或者获得了DBA授权 eg:为用户WANG定义一个模式S-C-SC CREATE SCHEMA "S-C-SC" AUT…...

Hive UDF开发实战:构建高性能JSON生成器

目录 一、背景与需求场景 二、开发环境准备 2.1 基础工具栈 2.2 Maven依赖配置 三、核心代码实现...

数字电子技术基础(三十六)——利用Multisim软件实现3线-8线译码器

目录 1 手动方式实现3线-8线译码器 2 使用字选择器实现3线-8线译码器 现在尝试利用Multisim软件来实现3线-8线译码器。本实验目的是验证74LS138的基本功能&#xff0c;简单来说就是“N中选1”。 实验设计&#xff1a; &#xff08;1&#xff09;使能信号&#xff1a;时&am…...

解析 HTML 网站架构规范

2025/3/28 向全栈工程师迈进&#xff01; 一、网页基本的组成部分 网页的外观多种多样&#xff0c;但是除了全屏视频或游戏&#xff0c;或艺术作品页面&#xff0c;或只是结构不当的页面以外&#xff0c;都倾向于使用类似的标准组件。 1.1页眉 通常横跨于整个页面顶部有一…...

小智机器人关键函数解析,Application::OutputAudio()处理音频数据的输出的函数

以下是对 Application::OutputAudio() 函数的详细解释&#xff1a; 源码&#xff1a; void Application::OutputAudio() { // 扬声器的输出auto now std::chrono::steady_clock::now();auto codec Board::GetInstance().GetAudioCodec();const int max_silence_seconds 10;…...

基于javaweb的SpringBoot驾校预约学习系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

《边缘计算风云录:FPGA与MCU的算力之争》

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 文章目录 **第一章&#xff1a;边城烽烟——数据洪流压境****第二章&#xff1a;寒铁剑匣——FPGA的千机变****第三章&#xff1a;枯木禅杖——MCU的至简道****第四章&#xff1a;双生契…...

3.3 元组

元组&#xff08;tuple&#xff09;&#xff1a; 1.元组的定义&#xff1a; -通过 tuple&#xff08;&#xff09; &#xff01;&#xff01;&#xff01;元组中的元素不能发生改变&#xff01;&#xff01;&#xff01; #测试元组的定义 # - 定义空元组 tuple1 ()print(tu…...

PyTorch版本过低导致属性错误-Linux服务器

问题 在 Jupyter Lab 中配置 Python 环境&#xff08;如 PyTorch 或其他库&#xff09;通常涉及以下几个步骤&#xff1a; 1. 检查当前 Jupyter Lab 的内核环境 运行以下命令查看当前可用的内核&#xff1a; !jupyter kernelspec list或者 jupyter kernelspec list这会显示 …...

一文解读DeepSeek大模型在政府工作中具体的场景应用

引言 本文以政务内部管理的视角&#xff0c;介绍DeepSeek大模型在政务数字化在转型中的提质增效应用&#xff01;政务本是一个复杂的系统&#xff0c;对外要提供公共服务&#xff0c;对内有严格的安全管理要求。DeepSeek大模型在政务系统中的应用&#xff0c;对外提升服务水平&…...

场馆预约小程序的设计与实现

摘 要 时代在进步&#xff0c;人们对日常生活质量的要求不再受限于衣食住行。现代人不仅想要一个健康的身体&#xff0c;还想拥有一身宛如黄金比例的身材。但是人们平常除了上下班和上下学的时间&#xff0c;其余空余时间寥寥无几&#xff0c;所以我们需要用体育场馆预约来节省…...

【C++】string

个人主页&#xff1a;NiKo C专栏&#xff1a;C程序设计 目录 一、标准库中的string类 二、string的遍历 三、string容量 四、string修改 一、标准库中的string类 1、string类 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;…...

在 RK3588 多线程推理 YOLO 时,同时开启硬件解码和 RGA 加速的性能分析

一、前言 本文是基于RK3588的YOLO多线程推理多级硬件加速引擎框架设计项目的延申与拓展&#xff0c;单独分析所提出的方案4的性能和加速原理&#xff0c;即同时开启 RKmpp 硬件视频解码和 RGA 硬件图像缩放、旋转。 二、实验结果回顾 在项目的总览篇中&#xff0c;给出了该方案…...

sqli-labs靶场 less 8

文章目录 sqli-labs靶场less 8 布尔盲注 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&#xf…...

3.2 列表的常见函数

1.列表的常用函数 -如何查看一个不认识的内容 -help() -查看官方帮助文档 -dir&#xff08;&#xff09; -查看内部函数 -随机数语句 import randomranom.randint(0,101) 随机生成0-100内的数字 list1 [1,2,3,4,5]list2 list([1,2,3,4,5,])list2 list("wang…...

Apache Doris 高频问题排查指南:从报错到性能优化

一、部署与配置问题 1. FE启动失败&#xff1a;Address already in use ERROR: fe.journal.Catalog constructor exception. port9010 is already used. 原因&#xff1a;端口被占用或残留进程未释放 解决&#xff1a; # 查找占用进程 lsof -i :9010 # 终止残留进程 kill…...

Hadoop/Spark 生态

Hadoop/Spark 生态是大数据处理的核心技术体系&#xff0c;专为解决海量数据的存储、计算和分析问题而设计。以下从底层原理到核心组件详细讲解&#xff0c;帮助你快速建立知识框架&#xff01; 一、为什么需要 Hadoop/Spark&#xff1f; ​传统单机瓶颈&#xff1a; 数据量超…...

51单片机的五类指令(二)——算术运算类指令

目录 一、加法指令 &#xff08;一&#xff09;不带进位加法指令&#xff08;ADD&#xff09; &#xff08;二&#xff09;带进位加法指令&#xff08;ADDC&#xff09; &#xff08;三&#xff09;加 1 指令&#xff08;INC&#xff09; &#xff08;四&#xff09;十进制…...

uniapp选择文件使用formData格式提交数据

1. Vue实现 在vue项目中,我们有个文件,和一些其他字段数据需要提交的时候,我们都是使用axios 设置请求头中的Content-Type: multipart/form-data,然后new FormData的方式来进行提交。方式如下: const sendRequest = () => {const formData = new FormData()formData…...

mac Python多版本第三方库的安装路径

终端查看python版本是 3.12&#xff0c;但是pycharm使用的python版本是 3.9 终端正常安装包以后&#xff0c;pycharm都可以正常使用&#xff0c;但是将 pycharm的python换成 3.12 版本&#xff0c;之前安装的库都没有了 通过终端查看安装库的位置&#xff0c;确实是安装到py…...

第 26 场 蓝桥月赛 部分题解

第 26 场 蓝桥月赛 2.灯笼猜谜3.元宵分配4.摆放汤圆5.元宵交友&#xff08;运行超时 通过90%&#xff09; 2.灯笼猜谜 分析&#xff1a;以当前位置为视角&#xff0c;要想移动的距离尽可能的少&#xff0c;按顺序猜谜语&#xff0c;给你一个区间&#xff0c;有三种情况&#xf…...

【Vue3知识】Vue3集成富文本编辑器TinyMCE

Vue3集成富文本编辑器TinyMce 集成一、安装依赖二、基础集成示例1. 组件封装&#xff1a;RichEditor.vue 三、关键配置说明1. **API Key 配置**2. **图片上传处理**3. **多语言支持** 四、完整本地化部署步骤&#xff08;无 API Key&#xff09;五、在父组件中使用六、常见问题…...

pod生命周期

1.init容器&#xff1a;做主容器运行前需要做的准备条件 2.探针 通俗易懂就是检测容器是否正常运行工作 启动探针startupProbe&#xff1a;检测应用是否完成启动 &#xff0c;如果启动则禁用其他探测 直到成功为止&#xff0c;探测失败则杀死容器&#xff0c;容器服从重启策略…...

Oracle数据库数据编程SQL<3.3 PL/SQL 游标>

游标(Cursor)是Oracle数据库中用于处理查询结果集的重要机制&#xff0c;它允许开发者逐行处理SQL语句返回的数据。 目录 一、游标基本概念 1. 游标定义 2. 游标分类 二、静态游标 &#xff08;一&#xff09;显式游标 【一】不带参数&#xff0c;普通的显示游标 1. 显式…...

OLLAMA 未授权访问-漏洞挖掘

1.漏洞描述 Ollama存在未授权访问漏洞。由于Ollama默认未设置身份验证和访问控制功能&#xff0c;未经授权的攻击者可在远程条件下调用Ollama服务接口&#xff0c;执行包括但不限于敏感模型资产窃取、虚假信息投喂、模型计算资源滥用和拒绝服务、系统配置篡改和扩大利用等恶意…...

多线程—线程安全集合类与死锁

上篇文章&#xff1a; 多线程—JUChttps://blog.csdn.net/sniper_fandc/article/details/146713322?fromshareblogdetail&sharetypeblogdetail&sharerId146713322&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 线程安全的集合类 …...

【鸿蒙5.0】鸿蒙登录界面 web嵌入(隐私页面加载)

在鸿蒙应用中嵌入 Web 页面并加载隐私页面&#xff0c;可借助 WebView 组件来实现。以下是一个完整示例&#xff0c;展示如何在鸿蒙 ArkTS 里嵌入 Web 页面并加载隐私政策页面。 在 HarmonyOS 应用开发中&#xff0c;如果你希望嵌入一个网页&#xff0c;并且特别关注隐私页面加…...

C++轻量HeaderOnly的JSON库

文章目录 1 nlohmann/json库说明2 nlohmann/json特点3 nlohmann/json库的使用方法3.1 引入头文件3.2 解析JSON字符串3.3 访问JSON数据3.4 生成JSON对象3.5 修改JSON数据3.6 将JSON写入文件3.7 遍历JSON对象 4 代码示例4.1 定义JSON数值类型4.2 从STL容器转换到json4.3 string序…...

打包python文件生成exe

下载PyInstaller 官网 pip install pyinstaller验证是否安装成功 pyinstaller --version打包 pyinstaller "C:\Documents and Settings\project\myscript.py"会生成.spec,build,dist三项&#xff0c;其中build,dist为文件夹&#xff0c;dist是最后的可执行文件&a…...

Nginx — Nginx安装证书模块(配置HTTPS和TCPS)

一、安装和编译证书模块 [rootmaster nginx]# wget https://nginx.org/download/nginx-1.25.3.tar.gz [rootmaster nginx]# tar -zxvf nginx-1.25.3.tar.gz [rootmaster nginx]# cd nginx-1.25.3 [rootmaster nginx]# ./configure --prefix/usr/local/nginx --with-http_stub_…...

《Mycat核心技术》第21章:高可用负载均衡集群的实现(HAProxy + Keepalived + Mycat)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…...

Dynamic WallPaper-壁纸动态-Mac电脑-4K超高清

Dynamic WallPaper-壁纸动态-Mac电脑-4K超高清 文章目录 Dynamic WallPaper-壁纸动态-Mac电脑-4K超高清一、介绍二、效果三、下载 一、介绍 Dynamic Wallpaper for mac版&#xff0c;是一款4K超高清动态壁纸软件&#xff0c;告别单调的静态壁纸&#xff0c;拥抱活泼的动态壁纸…...

MySQL8.4 NDB Cluster 集群配置安装

文章目录 前置条件安装步骤环境准备下载 安装 RPM 包安装 NDB 组件与常见错误配置节点启用节点配置启动 MySQL 集群验证集群状态 关于 ndb_mgm集群管理备份与恢复集群配置管理日志相关 MySQL NDB Cluster 是一个分布式数据库解决方案&#xff0c;提供高可用性、数据分片和自动故…...

多线程开发中List的使用

由于ArrayList在多线程高并发情况下是不安全的&#xff0c;因此要慎用&#xff0c;那么此时如果涉及到集合操作&#xff0c;应该怎么选&#xff1a; 方案一&#xff1a;Vector: 特点&#xff1a;通过给所有方法都用 synchronized 修饰从而保证线程安全&#xff0c; 缺点&…...

Html 页面图标的展示列表

Html 页面中经常需要使用网页图标&#xff0c;这些图标的样式和名称都不容易记住。常用的网页图标展示页面链接记录如下&#xff1a; Material Design Icons 图标库 - FontAwesome 字体图标中文Icon...

Vue实现动态路由的后端控制

在传统开发后台管理系统时&#xff0c;都会涉及权限控制这一功能需求 即&#xff1a;根据不同登录的角色账号来使用该账号拥有的功能&#xff0c;也就是说系统左边的菜单栏不是固定不变的。 首先是基础路由配置带有component的。 const allRoutes [// 基础路由{path: /,name…...

​AI训练中的专有名词大白话版

​AI训练中的专有名词大白话版 ​1. 数据集&#xff08;Dataset&#xff09;​ &#x1f449; ​人话&#xff1a;AI的“练习题题库”&#xff0c;包含一堆带答案的题目&#xff08;比如猫狗照片标签&#xff09;。 &#x1f539; ​例子&#xff1a; 训练集&#xff08;练习…...

kafka 与 RocketMQ对比

问题 1: 为什么使用消息队列?服务搭建KafkaRocketMQ编写 docker-compose.yml运行docker compose修改配置文件(解决网络问题)创建一个 topic运行skd尝试发送与接收功能 压力测试:Kafkabatch-size(批量大小)分区数:发送数据(MB/s)消费-线程数(15 分区) RocketMQ生产生产者数量批…...

instnatid模型加载器放在哪里

一般根据节点名称来放&#xff0c;如果没有就新建 ComfyUI\models\instantid...

Spring Boot自动配置原理解析

文章目录 前言一、SpringBootConfiguration二、EnableAutoConfiguration2.1、AutoConfigurationPackage2.2、Import(AutoConfigurationImportSelector.class) 三、ComponentScan四、自动配置源码4.1、获取所有候选的自动配置类4.2、过滤不满足条件的自动配置 总结 前言 在常规的…...

LlamaIndex实现(基于PDF|CSV文件)RAG检索增强生成:NaiveRAG

什么是 RAG&#xff1f; RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09; 是一种结合 信息检索&#xff08;Retrieval&#xff09; 和 文本生成&#xff08;Generation&#xff09; 的AI技术&#xff0c;用于提升大语言模型&#xff08;L…...

分布式系统面试总结:3、分布式锁(和本地锁的区别、特点、常见实现方案)

仅供自学回顾使用&#xff0c;请支持javaGuide原版书籍。 本篇文章涉及到的分布式锁&#xff0c;在本人其他文章中也有涉及。 《JUC&#xff1a;三、两阶段终止模式、死锁的jconsole检测、乐观锁&#xff08;版本号机制CAS实现&#xff09;悲观锁》&#xff1a;https://blog.…...

vue3搭建实战项目笔记三

vue3搭建实战项目笔记三 3.1.行高偏移问题3.2.谷歌浏览器上不能定位3.2.2 移动端css隐藏滚动条 3.3.获取列表的数据3.3.1 服务器返回十万条数据3.3.2 分页展示数据3.3.2 防止展示数据为空报错 3.4.上拉加载数据3.4.1 加载更多数据3.4.2 监听页面滚动到底部3.4.3 监听滚动的时机…...

【商城实战(101)】电商未来已来:新技术引领商城发展新航向

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配,乃至运营推广策略,102 章内容层层递进。无论是想…...

深入解析最大公约数(GCD)与最小公倍数(LCM)的C++实现

深入解析最大公约数&#xff08;GCD&#xff09;与最小公倍数&#xff08;LCM&#xff09;的C实现 一、GCD与LCM的数学定义 1. 最大公约数&#xff08;GCD&#xff09; 两个或多个整数共有约数中最大的一个。 例如&#xff1a; GCD(12, 18) 6GCD(21, 14) 7 2. 最小公倍数…...

低功耗LPWAN模块开发指南:远距离无线通信与边缘计算融合实战‌

在远程资产追踪、野外环境监测等场景中&#xff0c;稳定可靠的长距离通信与超低功耗是系统设计的核心挑战。eFish-SBC-RK3576通过 ‌原生双UART接口 USB OTG扩展能力‌ &#xff0c;可无缝集成主流LPWAN模组&#xff08;LoRa/NB-IoT&#xff09;&#xff0c;实现“数据采集-边…...