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

server/2024/12/15 6:42:06/

嘿,探险家们!欢迎再次踏上我们的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.ppmy.cn/server/150282.html

相关文章

IntelliJ IDEA 使用技巧与插件推荐

目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统(VCS) 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…

【设计模式】享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享尽可能多的对象来有效支持大量细粒度的对象。这个模式主要用于减少内存使用和提高性能,特别是在需要创建大量相似对象的场景中。享元模式的核心思想是将对象的状态分为…

redis集群安装部署 redis三主三从集群

redis集群安装部署 redis三主三从集群 1、下载redis2、安装redis集群 三主三从3、配置redis开机自启动3.1、建立启动脚本3.2、复制多份redis启动脚本给集群使用3.3、添加可执行权限3.4、配置开机自启动 1、下载redis 本次redis安装部署选择当前最新的稳定版本7.4.1 下载链接: …

【ESP32】Arduino开发 | ADC模数转换器 + 单次转换例程

关于ESP32的ADC外设的详细介绍放在了ESP-IDF开发的对应文章中,通过跳转链接可以找到。 1. API 1.1 读取ADC(原始值) uint16_t analogRead(uint8_t pin) pin:ADC管脚。 1.2 读取ADC(电压值) uint32_t a…

日拱一卒(17)——leetcode学习记录:定长字符串中元音字符的数量

一、题目 给你字符串 s 和整数 k 。 请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。 英文中的 元音字母 为(a, e, i, o, u)。 示例 1: 输入:s "abciiidef", k 3 输出:3 解释&…

概率、似然、最小二乘

参考文章 通过例子理解最大似然估计 最大似然估计和最小二乘估计的区别与联系 SLAM的发展以及分类 移动机器人运动模型 深入理解最大似然估计与最大后验估计:概率中的两大估计法 从贝叶斯公式到卡尔曼滤波 Kalman滤波通俗理解实际应用 简单总结 概率:…

Visual Studio Community安装WebForm创建和数据连接

目录 一、安装Visual Studio Community 1.下载Visual Studio Community 2.双击安装 3.配置 二、项目创建 1.创建新项目 2.配置新项目 3.创建web窗体 4.代码分部 5.文件打开问题 三、数据库访问 1.自己先装一个sql server 2.创建实体数据模型 3.创建连接 4.修改更…

react-dnd 拖拽事件与输入框的文本选中冲突

问题描述 当我们使用拖拽库的时候,往往会遇到拖拽的一个元素他的子孙元素有输入框类型的dom节点,当拖拽的事件绑定在该元素身上时候,发现子孙的输入框不能进行文本选中了,会按住鼠标去选中文本的时候会触发拖拽 实际的效果&…