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

C# 探险之旅:第二十七节 - 类型class(属性) —— 给你的类穿上“属性”的外衣

嘿,探险家们!欢迎再次踏上我们的C#奇幻之旅。今天,我们要聊聊一个超级有趣的话题——类的“属性”。想象一下,如果我们要给类穿上一件酷炫的外衣,那属性就是这件外衣上的各种口袋和装饰,让类变得既实用又拉风!

什么是属性?

首先,让我们来个轻松的比喻。想象一下,你有一个超级英雄(类),比如“钢铁侠”。钢铁侠有很多特征,比如他的盔甲颜色(红色和金色)、他的能量等级、还有他能不能飞。这些特征,在编程世界里,就是类的“属性”。

属性就像是类的私人小房间,里面藏着类的各种信息和状态。你可以通过这些小房间的门(也就是属性的名称)来存取或者查看里面的内容。

定义属性

在C#中,给类添加属性超级简单,就像给钢铁侠添加新装备一样。我们来看个例子:

public class IronMan
{// 属性就像是这样的小房间public string SuitColor { get; set; } // 盔甲颜色public int EnergyLevel { get; set; }  // 能量等级public bool CanFly { get; set; }      // 能不能飞
}

在这个例子中,SuitColorEnergyLevelCanFly就是IronMan类的三个属性。每个属性都有一个类型(比如stringintbool),并且它们都有getset这两个“门”,让我们可以读取和修改它们的值。

使用属性

有了这些属性,我们就可以像操作钢铁侠的装备一样,来操作类的状态了。

// 创建一个钢铁侠实例IronMan tony = new IronMan();// 设置属性tony.SuitColor = "红色和金色";tony.EnergyLevel = 100;tony.CanFly = true;// 读取属性Console.WriteLine($"钢铁侠的盔甲颜色是:{tony.SuitColor}");Console.WriteLine($"钢铁侠的能量等级是:{tony.EnergyLevel}");Console.WriteLine($"钢铁侠能飞吗?:{tony.CanFly}");

看,是不是很简单?我们就像是在给钢铁侠换装备、检查他的状态一样,轻松地操作类的属性。

 字段和属性的区别:

1. 封装性:属性是“门”,字段是“房间”

  • 字段(Fields):就像是你家的房间,里面的东西(数据)直接暴露在外面,谁都能看到。在C#中,字段通常用来存储类的内部状态,但如果你直接暴露字段给外部访问,那就像是把家里的房门大开,任何人都可以随便进出,这显然不太安全。
  • 属性(Properties):则像是你家的门,虽然房间里的东西还在那里,但你要通过门才能进去看。属性提供了一种受控访问字段的方式,你可以通过getset访问器来控制谁可以进来看(读取数据)和谁可以往里面放东西(写入数据)。这样,你就可以在“门”上加上锁,或者设置一些条件,比如只有输入密码才能进去。

2. 访问修饰符:属性更灵活,字段需谨慎

  • 字段:虽然字段也可以使用各种访问修饰符(如publicprivateprotected等),但通常建议将字段声明为privateprotected,以避免直接从类外部访问。这是封装的一种表现,有助于保护类的内部状态。
  • 属性:则可以有不同级别的访问限制,你可以根据需要将其声明为publicprivateprotected等。由于属性提供了对字段的受控访问,因此即使你将字段声明为private,也可以通过公共属性来访问它,这样既保证了封装性,又提供了灵活性。

3. 逻辑处理:属性可以“看门”,字段只能“装东西”

  • 字段:只是简单地存储数据,不提供任何额外的逻辑处理。当你读取或写入字段时,就是直接操作内存中的数据。
  • 属性:则可以在getset访问器中添加逻辑处理。比如,你可以在设置属性值时添加数据验证逻辑,确保输入的数据是有效的;或者,你可以在设置某个属性时,自动更新其他相关属性的值。这样,属性就像是一个聪明的“看门人”,它可以根据需要来决定是否允许你进去看或放东西进去。

4. 数据绑定支持:属性是“明星”,字段是“路人”

  • 字段:通常不支持数据绑定。在很多框架和库中,数据绑定是通过属性来实现的。如果你试图将字段绑定到UI控件上,可能会遇到一些问题。
  • 属性:则广泛支持数据绑定。在开发UI应用程序时,你经常需要将控件的属性与类的属性绑定在一起,以实现数据的自动更新和显示。这时,属性的优势就显现出来了。

5. 命名约定:属性是“大写”,字段是“小写”

  • 字段:通常以小写字母开头,使用驼峰式命名法,并在前面加上下划线(如_name)。
  • 属性:则通常以大写字母开头,遵循Pascal命名法(如Name)。这种命名约定有助于区分字段和属性,提高代码的可读性。
小结

好了,探险家们,今天我们的探险之旅就到这里。记住,属性就像是类的外衣,让类变得更加丰富多彩和实用。下次当你看到类的属性时,不妨想想钢铁侠的那些酷炫装备,你会发现,编程其实也可以很有趣!

下次,我们将继续我们的探险,解锁更多C#的神奇技能。记得带上你的好奇心,我们不见不散!

相关文章:

C# 探险之旅:第二十七节 - 类型class(属性) —— 给你的类穿上“属性”的外衣

嘿,探险家们!欢迎再次踏上我们的C#奇幻之旅。今天,我们要聊聊一个超级有趣的话题——类的“属性”。想象一下,如果我们要给类穿上一件酷炫的外衣,那属性就是这件外衣上的各种口袋和装饰,让类变得既实用又拉…...

《饕餮记》精彩片段(一)

也是无意中看到鲛人脍单元集片段,才去看了这个剧 整体略架空和部分逻辑不是很连贯和完美 精彩点不在于整体和走向和故事线 也不在于大牌明星撑场,因为全场只有安悦溪一个脸熟明星撑场子 而在于每个单元间离奇小故事 和华胥引差不多,属于逻…...

esxi8 虚拟机使用ubuntu22模板后 没有ip配置文件,只有ipv6链接正常使用

esxi8 虚拟机使用模板后 没有ip配置文件,只有ipv6链接正常使用,/etc/NetworkManager/system-connections配置下没有配置文件 只有/etc/netplan/有文件 sudo ip addr add 192.168.1.9/24 dev ens35 # 临时设置ip, 接口名ens35 sudo vi /et…...

C++内存管理

1、代码区 代码区的特点: 1.只读:防止程序运行时修改其执行代码,有助于程序稳定和安全性。 2.共享:多个程序运行可共享同一份代码区,以节省内存。 3.固定大小:代码区的大小在程序编译连接时就已经确定&a…...

分类算法评估标准综述

目录 ​编辑 混淆矩阵(Confusion Matrix) 准确率(Accuracy) 精确率(Precision) 召回率(Recall) F1分数(F1 Score) ROC曲线和AUC值 P-R曲线 马修斯相…...

基于windows环境使用nvm安装多版本nodejs

目录 前言 一、卸载node 二、nvm是什么? 三、nvm安装 1.官网下载 nvm 包 2. 安装nvm-setup.exe 3. 配置路径和下载镜像 4. 检查安装是否完成 四、 使用nvm安装node 五、修改npm默认镜像源为淘宝镜像 六、环境变量配置 1. 新建目录 2. 设置环境变量 七…...

【人工智能-中级】神经网络的调优与正则化策略

文章目录 神经网络的调优与正则化策略1. 神经网络调优策略学习率调整批量大小(Batch Size)优化算法2. 正则化策略L1与L2正则化Dropout数据增强3. 超参数优化4. 小结神经网络的调优与正则化策略 在深度学习中,训练一个高效且准确的神经网络模型不仅依赖于选择合适的架构,还…...

VBA 连续打印多个内容成PDF

VBA 连续打印多个内容成PDF Dim wb As Workbook Dim sht1 As Worksheet Set sht1 ActiveSheet PT ThisWorkbook.PathApplication.ScreenUpdating FalseApplication.DisplayAlerts FalseApplication.Calculation xlCalculationManual For i [aa2] To [ab2][ad2] iSet wb …...

【Linux网络编程】第十弹---打造初级网络计算器:从协议设计到服务实现

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Protocol.hpp 1.1、Request类 1.1.1、基本结构 1.1.2、构造析构函数 1.1.3、序列化函数 1.1.4、反…...

嵌入式 linux Git常用命令 抽补丁 打补丁

Git常用命令 为什么要学习git呢?我相信刚入门的小伙伴敲打肯定碰到过这种玄学问题,我明明刚刚还能用的代码,后面不知道咋的就不能用了,所以每次你调出一个功能点以后都会手动复制一份代码防止出问题,时间一长发现整个…...

windows C#-方法概述(上)

方法是包含一系列语句的代码块。 程序通过调用该方法并指定任何所需的方法参数使语句得以执行。 在 C# 中,每个执行的指令均在方法的上下文中执行。 Main 方法是每个 C# 应用程序的入口点,并在启动程序时由公共语言运行时 (CLR) 调用。 在使用顶级语句的…...

SpringCloud和Nacos的基础知识和使用

1.什么是SpringCloud ​ 什么是微服务? ​ 假如我们需要搭建一个网上购物系统,那么我们需要哪些功能呢?商品中心、订单中心和客户中心等。 ​ 当业务功能较少时,我们可以把这些功能塞到一个SpringBoot项目中来进行管理。但是随…...

一行一行出字的视频怎么做?简单的操作方法

在视频制作中,逐行出现的字幕效果不仅能够增强视觉冲击力,还能让观众更加专注于内容,特别适合用于教育视频、书单推荐、诗歌朗诵等多种场景。下面,我们将详细介绍如何影忆,来制作这种逐行出字的视频效果。 1.字幕逐行…...

鸿蒙NEXT开发案例:颜文字搜索器

【引言】 本文将介绍一个名为“颜文字搜索器”的开发案例,该应用是基于鸿蒙NEXT平台构建的,旨在帮助用户快速查找和使用各种风格的表情符号。通过本案例的学习,读者可以了解如何在鸿蒙平台上进行数据处理、UI设计以及交互逻辑的实现。 【环…...

python在纯文本程序里面藏一张图

思路base64编码是纯文本的,base64是以字符串的形式存在,包括但不限于python,js,C#,C/Cpp. 这里给出python示例:运行后可以显示一张opencv的官方例程图. 废话不说,上程序. import os,sys,time,cv2,base64,requests from PIL import Image from io import BytesIO import nump…...

Java 身份证校验工具类(15位校验、18位校验与15转18)

文章目录 身份证简介(一)身份证号码的组成(二)一代和二代身份证一代身份证二代身份证 检验思路分析(一)15位身份证号码(二)18位身份证号码(三)校验算法示例&a…...

The Past, Present and Future of Apache Flink

摘要:本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024上海站主论坛开场的分享,今年正值Flink开源项目诞生的第10周年,借此时机,王峰回顾了Flink在过去10年的发展历程以及 Flink社区…...

不能通过 ip 直接访问 共享盘 解决方法

from base_config.config import OpenSMB, SMB import os, time, calendar, requests, decimal, platform, fs.smbfsinfo_dict SMB.EPDI_dict info_dict[host] (FS03,10.6.12.182) info_dict[direct_tcp] True# smb OpenSMB(info_dict)print(ok)# 根据 ip 查询电脑名 impor…...

IDEA方法注释模板设置

目录 创建模板 新建模板:命名为* 设置模板内容-IDEA格式模板 设置模板应用场景 设置参数 创建模板 /**Enter这里我们也按照这种习惯来设置IDEA的方法注释:File-->Settings-->Editor-->Live Templates 先新建模板组,然后在模板组中…...

组件缓存keep-alive

希望点击面经详情回来之后该1面经详情停留在滚动条停止的位置 有些 组件是不需要缓存的,例如详情页不需要缓存。解决方法是keep-alive的三个属性 include:组件名数组,只有匹配的组件会被缓存exclude:组件名数组,任何匹配的组件都不会被缓存ma…...

【经验分享】搭建本地训练环境知识点及方法

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...

Ant Design of Vue之带select控件,单元格编辑功能的表格EditableCell组件

效果图 功能 表格里面某一行或者某一个单元格支持select复选框可以编辑,新增一行数据,删除一行数据,并且有校验规则 源码 editablecell组件源码 参考自 源码...

etcd节点扩/缩容

etcd集群节点数越多越好吗? etcd 集群是一个 Raft Group,没有 shared。所以它的极限有两部分,一是单机的容量限制,内存和磁盘;二是网络开销,每次 Raft 操作需要所有节点参与,每一次写操作需要集…...

FFmpeg功能使用

步骤:1,安装FFmpeg Download FFmpeg 在这里点击->Windows builds from gyan.dev;如下图 会跳到另外的下载界面: 在里面下拉选择点击ffmpeg-7.1-essentials_build.zip: 即可下载到FFmpeg; 使用&#…...

动手学深度学习-线性神经网络-7softmax回归的简洁实现

目录 初始化模型参数 重新审视Softmax的实现 优化算法 训练 小结 在 线性回归的实现中, 我们发现通过深度学习框架的高级API能够使实现 线性回归变得更加容易。 同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在上一节…...

GenAI + 3D:开启4D场景重建的新纪元

近日,一项激动人心的研究成果在《GenAI + 3D》方向取得了重大进展,它提出了一种创新的方法,能够将普通的2D视频转换为完整的4D场景。想象一下,《黑客帝国》中的"子弹时间"效果——现在你不仅可以停留在一个特定的时刻来改变视角,还可以自由地在空间和时间中移动…...

记一个framebuffer显示混乱的低级错误

记一个framebuffer显示混乱的低级错误 由于framebuffer的基础知识不扎实,这个任务上我多卡了两天,差点把我搞死,于此记录为后鉴。 打算用awtk做一个多进程项目,计划把framebuffer的内容通过websocket输出到浏览器上去显示画面, …...

网络安全教学博客(二):常见网络安全威胁剖析

在上一篇博客中,我们了解了网络安全的基础概念和重要性。今天,让我们深入探讨一下常见的网络安全威胁,以便我们能够更好地识别和防范它们。 恶意软件(Malware) 病毒(Virus):病毒是一…...

【ZYNQ开发】Vitis下保存与快速加载BSP配置的方法

在使用Xilinx的Vitis进行ZYNQ PS端开发时,常常涉及到对于BSP的设置,比较典型的像是使用lwip时,需要对DHCP、memory以及send_buffer等进行一些自定义的修改。在设计到硬件描述文件需要进行更换(PL端更改程序)重新加载工…...

go开发中interface和方法接收器的使用

Go 语言中的接口和方法接收器学习 Go 中的 interface 就像是一个神奇的魔法杖,能让你轻松地将不同的类型拉到同一个阵营里。与其他语言的接口不同,Go 的接口无需显式声明“我实现了你”,只要你满足了接口规定的方法,Go 就会自动认…...

【昇腾】NPU ID:物理ID、逻辑ID、芯片映射关系

起因: https://www.hiascend.com/document/detail/zh/Atlas%20200I%20A2/23.0.0/re/npu/npusmi_013.html npu-smi info -l查询所有NPU设备: [naienotebook-npu-bd130045-55bbffd786-lr6t8 DCNN]$ npu-smi info -lTotal Count : 1NPU…...

景联文科技提供高质量文本标注服务,驱动AI技术发展

文本标注是指在原始文本数据上添加标签的过程,这些标签可以用来指示特定的实体、关系、事件等信息,以帮助计算机理解和处理这些数据。 文本标注是自然语言处理(NLP)领域的一个重要环节,它通过为文本的不同部分提供具体…...

【Spark】Spark Join类型及Join实现方式

如果觉得这篇文章对您有帮助,别忘了点赞、分享或关注哦!您的一点小小支持,不仅能帮助更多人找到有价值的内容,还能鼓励我持续分享更多精彩的技术文章。感谢您的支持,让我们一起在技术的世界中不断进步! Sp…...

docker安装、升级、以及sudo dockerd --debug查看启动失败的问题

1、docker安装包tar下载地址 Index of linux/static/stable/x86_64/ 2、下载tgz文件并解压 tar -zxvf docker-24.0.8.tgz 解压后docker文件夹下位docker相关文件 3、将老版本docker相关文件,备份 将 /usr/bin/docker下docker相关的文件,mv到备份目录…...

做T和做T+0有什么区别

做T和做T0在股市中实际上有紧密的联系,但也有所区别。以下是对两者的详细比较: 一、定义与原理 做T: 广义上,做T指的是一种通过低买高卖或高卖低买来赚取差价的交易策略。这种策略可以应用于不同的交易周期,包括日内交…...

【JAVA项目】基于ssm的【美食推荐管理系统】

【JAVA项目】基于ssm的【美食推荐管理系统】 技术简介:采用JSP技术、B/S架构、SSM框架、MySQL技术等实现。 系统简介:美食推荐管理系统,在系统首页可以查看首页、热门美食、美食教程、美食店铺、美食社区、美食资讯、我的、跳转到后台等内容。…...

从零开始学docker(五)-可用的docker镜像

最近docker镜像都不能访问,目前亲测可用的docker镜像可用,并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表,只能手动查询索引目录(解决方案在最后)。 linux服务器vim打开镜像文件daemon.json vim /e…...

repmgr集群部署-PostgreSQL高可用保证

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…...

2020数字中国创新大赛-虎符网络安全赛道丨Web Writeup

本文是i春秋论坛作家「OPLV1H」表哥参加2020数字中国创新大赛-虎符网络安全赛道线上初赛的赛后总结,关于Web的Writeup记录,感兴趣的小伙伴快来学习吧。 1、hash_file — 是使用给定文件的内容生成哈希值,和文件名称无关。 2、jwt令牌结构和j…...

手动部署前后端项目到LInux上面

一&#xff1a;部署后端工程 在本地的idea中先启动当前的工程&#xff0c;然后访问一下&#xff0c;看看工程是否正常访问。 执行package指令&#xff0c;进行打包操作&#xff0c;将当前的springboot项目&#xff0c;打成一个jar包。 <!-- SpringBoot应用打包插件--> …...

【一本通】intervals

【一本通】intervals &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给出n个闭区间[ai,bi]和n个整数c1,……,cn。令Z表示一个整数集合&#xff0c;Z集合中最少要包含多少个整数可以使得每个区[ai,bi]都至少有ci个整数位于Z集合中。 输入 …...

测试脚本并发多进程:pytest-xdist用法

参考&#xff1a;https://www.cnblogs.com/poloyy/p/12694861.html pytest-xdist详解&#xff1a; https://www.cnblogs.com/poloyy/p/14708825.html 总 https://www.cnblogs.com/poloyy/category/1690628.html...

ALOHA 协议详解

注&#xff1a;本文为 “ALOHA 协议” 相关文章合辑。 未去重整理。 动态分配信道&#xff08;ALOHA 协议、CSMA 协议&#xff09; QuantumYou 于 2021-07-27 09:32:04 发布 ALOHA 协议 纯 ALOHA 协议 -纯 ALOHA 协议思想&#xff1a;不监听信道&#xff0c;不按时间槽发送…...

ios h5中在fixed元素中的input被focus时,键盘遮挡input (van-popup、van-feild)

问题描述&#xff1a; 前提&#xff1a;我使用的是vant组件库&#xff0c;其中一个页面中有一个van-popup组件&#xff0c;van-popup组件中又嵌套了一个van-field组件预期结果&#xff1a;当点击van-feild输入框时&#xff0c;键盘弹起&#xff0c;输入框显示在键盘上方实际结…...

【Mysql】索引下推、索引合并详解

文章目录 1. 索引下推&#xff08;Index Condition Pushdown, ICP&#xff09;定义工作机制实现过程优化的典型场景 2. 索引合并&#xff08;Index Merge&#xff09;定义索引合并方式使用限制 3. 对比与应用场景选用建议 这篇文章就简单的给大家介绍下索引下推、索引合并 1. 索…...

简易记事本项目—基于SSM+Vue前后端分离

&#x1f308;&#x1f308;&#x1f308;今天给大家分享的是&#xff1a;基于SSMVue的简易记事本项目 目录 引言 技术栈介绍 项目概述 1. 用户注册 2. 用户登录 3. 用户退出 4. 事件分类 5. 事件管理 项目主要图片 引言 在快节奏的现代生活中&#xff0c;我们常常被…...

Java转C之C/C++ 的调试和内存分析

C/C 的调试和内存分析工具非常丰富&#xff0c;这些工具可以帮助开发者定位错误、分析程序行为&#xff0c;以及检测内存问题&#xff08;如内存泄漏、非法访问等&#xff09;。下面将详细介绍常见的调试器和内存分析工具&#xff0c;并进行分类讲解。 一、调试器 1. GDB (GNU…...

Python 面向对象编程全面解析与深度探索

目录 类和对象的概念 类&#xff08;Class&#xff09; 对象&#xff08;Object&#xff09; (一&#xff09;属性&#xff08;Attributes&#xff09; &#xff08;a).实例属性&#xff08;Instance Attributes&#xff09; &#xff08;b).类属性&#xff08;Class Att…...

零配置打包工具 Parcel 的详细使用指南

前言 在前端开发中&#xff0c;选择一个高效且易用的打包工具至关重要。Parcel 作为一款零配置的 Web 应用打包工具&#xff0c;凭借其卓越的性能和简单的使用体验&#xff0c;赢得了众多开发者的青睐。它不仅能够自动处理依赖关系和代码打包&#xff0c;还支持热模块替换和多…...

批量查找文件关键字-工具

string find...