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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据保护策略:如何保障重要信息的安全

一、什么是数据安全? 数据安全是保护数字信息免遭盗窃、未经授权的访问和恶意修改的过程。这是一个持续的过程,负责监督信息的收集、存储和传输。 机密性:保护数据免遭未授权方访问。 完整性:保护数据免遭未经授权的修改、损坏…

Mvc、Springmvc框架

一.Mvc: 1.概念: MVC它是一种设计理念。把程序按照指定的结构来划分: Model模型 、View视图 、Controller控制层; 结构图: 二.Springmvc: 1.概念: springmvc框架它是spring框架的一个分支。它是按照mvc架构思想设计…

【CSS in Depth 2 精译_078】12.6 调整字间距,提升可读性 + 12.7 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体12.3 谷歌字体12.4 font-fac…

Python高性能web框架-FastApi教程:(2)路径操作装饰器方法

路径操作装饰器方法 1. fastapi支持的各种请求方式 app.get() app.post() app.put() app.patch() app.delete() app.options() app.head() app.trace()2. 定义不同请求方式的路由 # 定义GET请求的路由 app.get(/get) def get_test():return {method: get方法} app.get(/get)…

PostgreSQL 入门

下载与安装 部分国产数据库采用PostgreSQL作为基础进行研发,因此先尝试了解一下原始数据库情况。 PostgreSQL 简称 PG 官网:https://www.postgresql.org/ PostgreSQL “世界上最先进的开源关系型数据库” 这是官网上的口号。 PostgreSQL: The World…

Java-26 深入浅出 Spring - 实现简易Ioc-02 无IoC与AOP场景下实现业务

点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatis&#xff…

工作流审批功能全解析:提升流程效率的关键要素

1. 引言 在当今数字化时代,企业与组织的运营效率在很大程度上依赖于高效、精准的工作流审批系统。随着业务日益复杂且多样化,审批流程变得愈加细致和灵活。一个完善的工作流审批系统不仅能确保任务在组织内部有序流转、协调各方资源,还能实现…

API接口示例:电商商品评论数据

当然,以下是一个简化的电商商品评论数据API接口的示例。请注意,这只是一个示例,实际的API接口可能会更加复杂,并且会包含更多的验证、错误处理和安全措施。 API接口示例:电商商品评论数据 基础信息 API名称&#xf…

HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由

网络层数据封装 首先IP地址封装在网络层,它用于标识一台网络设备,其中IP地址分为两个部分,网络地址和主机地址,通过我们采用点分十进制的形式进行表示。 IP地址分类 对IP地址而言,它细分为五类,A,B,C,D,E,…

Microsemi Libero使用技巧11——CoreUARTAPB RX管脚分配时不显示

调用串口IP核CoreUARTAPB,并例化到顶层设计,发现UART_RX管脚在进行管脚分配时没有显示出来,最后发现是CoreAPB3总线IP核配置不对导致,改为如下配置后正常。

SEGGER | 基于STM32F405 + Keil - RTT组件01 - 移植SEGGER RTT

导言 RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术,它结合了SWO和半主机的优点,具有极高的性能。 使用RTT可以从MCU非常快速输出调试信息和数据,且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU&#xff0…

SpringBoot集成JWT和Redis实现鉴权登录功能

目前市面上有许多鉴权框架,鉴权原理大同小异,本文简单介绍下利用JWT和Redis实现鉴权功能,算是抛砖引玉吧。 主要原理就是“令牌主动失效机制”,主要包括以下4个步骤: (1)利用拦截器LoginInterceptor实现所有接口登录拦…

29.在Vue 3中使用OpenLayers读取WKB数据并显示图形

在Web开发中,地理信息系统(GIS)应用越来越重要,尤其是在地图展示和空间数据分析的场景中。OpenLayers作为一个强大的开源JavaScript库,为开发者提供了丰富的地图展示和空间数据处理能力。在本篇文章中,我将…

【bWAPP】 HTML Injection (HTML注入)

我们都是在一条铺满荆棘的新路上摸索着前行,碰个鼻青眼肿几乎不可避免,而问题在于,我们能不能在这条路上跌倒之后,爬起来继续走下去。 HTML Injection - Reflected (GET) get方式的html代码注入 漏洞url:http://ran…

内网是如何访问到互联网的(华为源NAT)

私网地址如何能够访问到公网的? 在上一篇中,我们用任意一个内网的终端都能访问到百度的服务器,但是这是我们在互联网设备上面做了回程路由才实现的,在实际中,之前也说过运营商是不会写任何路由过来的,那对于…

tomcat的优化和动静分离

tomcat的优化 1.tomcat的配置优化 2.操作系统的内核优化 注意:设置保存后,需要重新ssh连接才会看到配置更改的变化 vim /etc/security/limits.conf # 65535 为Linux系统最大打开文件数 * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 *…

粗略的过一下StableDiffusion3的一些方面

什么是Stable Diffusion 3 Stable Diffusion 3是由Stability AI开发的最新且最先进的文本生成图像模型之一,在图像保真度、多主体处理和文本遵循性方面实现了显著提升。该模型采用了全新的多模态扩散变压器(MMDiT)架构,并为图像和…

测试工程师八股文04|计算机网络 和 其他

一、计算机网络 1、http和https的区别 HTTP和HTTPS是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。 ①http和https的主要区别在于安全性。http是一种明…

doxygen–自动生成文档工具

原文地址:doxygen–自动生成文档工具 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 简介 doxygen是软件开发中广泛使用的文档生成工具。它可以从源代码注释中自动生成文档,解析类、函数、参数相关信息,并生…

ElasticSearch04-高级操作

零、文章目录 ElasticSearch04-高级操作 1、文档添加 (1)生成文档ID 不指定 ID,即自动生成ID,ID 是一行数据的唯一键。语法:POST /index/_doc # 创建索引 PUT testid# 默认情况下自动生成ID POST /testid/_doc {&…