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#的神奇技能。记得带上你的好奇心,我们不见不散!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/489951.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习记录】Docker初探-容器创建与拉取(2)

参考资料 Window下玩转Docker Desktop哔哩哔哩bilibili Docker镜像推送至Docker Hub的完整教程-百度开发者中心 (baidu.com) 为什么需要Docker? Docker可以在不同服务器之间转移打包好的程序和环境,从而方便测试。打包好的程序和环境可以被称之为容器…

MongoDB学习路线图

‌MongoDB 在多种场景下都是理想的数据库解决方案。让我们讨论一些你应该考虑使用 MongoDB 的关键情形。 处理大量数据 当处理可能需要大量读写操作的大量数据时,MongoDB 是一个出色的选择,因为它具有高性能和水平扩展性。通过利用复制和分片&#xff…

IOS通过WDA自动化中遇到的问题

IOS自动化遇到的问题 搭建WDA环境中遇到的问题1、XCode unsupport iphone xxx.2、创建Bundle Identifier出现问题:Communication with Apple failed3、创建Bundle Identifier出现问题:Automatic signing failed \Signing certificate is invalid4、创建B…

基于卷积神经网络的图像二分类检测模型训练与推理实现教程 | 幽络源

前言 对于本教程,说白了,就是期望能通过一个程序判断一张图片是否为某个物体,或者说判断一张图片是否为某个缺陷。因为本教程是针对二分类问题,因此主要处理 是 与 不是 的问题,比如我的模型是判断一张图片是否为苹果…

【razor】echo搭配relay功能分析

echo 要搭配relay 实现作者说relay在linux上跑,可以模拟丢包、延迟目前没看到如何模拟。relay监听9200,有俩作用 echopeer1 发relay,replay 把peer1的包给peer2 ,实现p2p能力。 接收端:采集后发送发给relay的 接收端的地址就是自己,的地址就是本地的9200,因此是让relay接…

轩凯生物被警示,财务内控不规范,华泰证券又被处罚

作者:Tracy 来源:IPO魔女 11月21日,南京轩凯生物科技股份有限公司(简称“轩凯生物”)被交易所下达书面警示的自律监管函。同时其保荐机构华泰联合证券和会计师事务所天衡,均受到监管处罚。这是今年来&…

【C++习题】19.数组中第K个大的元素

题目&#xff1a;数组中第K个大的元素 链接&#x1f517;&#xff1a;数组中第K个大的元素 题目&#xff1a; 代码&#xff1a; class Solution { public:int findKthLargest(vector<int>& nums, int k) {// 将数组中的元素先放入优先级队列中priority_queue<i…

一键学懂BurpSuite(7)

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

工业大数据分析算法实战-day04

文章目录 day04统计分析概率分布参数估计假设检验 统计分布拟合1.基于核函数的非参数方法2. 单概率分布的参数化拟合3. 混合概率分布估计 线性回归模型1. OLS模型&#xff08;普通最小二乘法&#xff09;2. OLS模型检验3. 鲁棒线性回归4. 结构复杂度惩罚&#xff08;正则化&…

【Golang】Go语言编程思想(六):Channel,第四节,Select

使用 Select 如果此时我们有多个 channel&#xff0c;我们想从多个 channel 接收数据&#xff0c;谁来的快先输出谁&#xff0c;此时应该怎么做呢&#xff1f;答案是使用 select&#xff1a; package mainimport "fmt"func main() {var c1, c2 chan int // c1 and …

Python中的OpenCV详解

文章目录 Python中的OpenCV详解一、引言二、OpenCV基础操作1、OpenCV简介2、安装OpenCV3、图像读取与显示 三、图像处理技术1、边缘检测2、滤波技术 四、使用示例1、模板匹配 五、总结 Python中的OpenCV详解 一、引言 在当今数字化社会中&#xff0c;图像处理和计算机视觉技术…

基于python的Selenium webdriver环境搭建(笔记)

一、PyCharm安装配置Selenium环境 本文使用环境&#xff1a;windows11、Python 3.8.1、PyCharm 2019.3.3、Selenium 3.141.0 测试开发环境搭建综述 安装python和pycharm安装浏览器安装selenium安装浏览器驱动测试环境是否正确 这里我们直接从第三步开始 1.1 Seleium安装 …

LLMC:大语言模型压缩工具的开发实践

关注&#xff1a;青稞AI&#xff0c;学习最新AI技术 青稞Talk主页&#xff1a;qingkelab.github.io/talks 大模型的进步&#xff0c;正推动我们向通用人工智能迈进&#xff0c;然而庞大的计算和显存需求限制了其广泛应用。模型量化作为一种压缩技术&#xff0c;虽然可以用来加速…

【渗透测试】信息收集二

其他信息收集 在渗透测试中&#xff0c;历史漏洞信息收集是一项重要的工作&#xff0c;以下是相关介绍&#xff1a; 历史漏洞信息收集的重要性 提高效率&#xff1a;通过收集目标系统或应用程序的历史漏洞信息&#xff0c;可以快速定位可能存在的安全问题&#xff0c;避免重复…

TQ15EG开发板教程:使用SSH登录petalinux

本例程在上一章“创建运行petalinux2019.1”基础上进行&#xff0c;本例程将实现使用SSH登录petalinux。 将上一章生成的BOOT.BIN与imag.ub文件放入到SD卡中启动。给开发板插入电源与串口&#xff0c;注意串口插入后会识别出两个串口号&#xff0c;都需要打开&#xff0c;查看串…

微信小程序5-图片实现点击动作和动态加载同类数据

搜索 微信小程序 “动物觅踪” 观看效果 感谢阅读&#xff0c;初学小白&#xff0c;有错指正。 一、功能描述 a. 原本想通过按钮加载背景图片&#xff0c;来实现一个可以点击的搜索button&#xff0c;但是遇到两个难点&#xff0c;一是按钮大小调整不方便&#xff08;网上搜索…

学习笔记:从ncsi/nc-si协议和代码了解网络协议的设计范式

学习笔记&#xff1a;从ncsi/nc-si协议和代码了解网络协议的设计范式 参考文档&#xff1a; https://www.dmtf.org/standards/published_documents https://www.dmtf.org/dsp/DSP0222 https://www.dmtf.org/sites/default/files/standards/documents/DSP0222_1.2.0.pdf参考代…

3D 生成重建030-SV3D合成环绕视频以生成3D

3D 生成重建030-SV3D合成环绕视频以生成3D 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 论文提出了Stable Video 3D (SV3D)——一个用于生成围绕三维物体的高分辨率图像到多视角视频的潜在视频扩散模型。最近关于三维生成的文献提出了将二维生成模型应用于新视图合成…

3D 生成重建035-DiffRF直接生成nerf

3D 生成重建035-DiffRF直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 本文提出了一种基于渲染引导的三维辐射场扩散新方法DiffRF&#xff0c;用于高质量的三维辐射场合成。现有的方法通常难以生成具有细致纹理和几何细节的三维模型&#xff0c;并且容易出…

Spark执行计划解析后是如何触发执行的?

在前一篇Spark SQL 执行计划解析源码分析中&#xff0c;笔者分析了Spark SQL 执行计划的解析&#xff0c;很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行&#xff0c;每个概念之间没有强烈的关联&#xff0c;因此这中间总感觉少了点…