人生低谷来撸C#--015 C# 属性(Property)
1、概念
在C#中,属性(Property)是一种特殊的成员,它提供了一种灵活的机制来访问和修改对象的状态(即类的字段)。属性结合了字段和方法的特性,使得数据的访问和修改更加安全和便捷。下面我用一个通俗的比喻来帮助你理解属性:
想象一下你有一个带锁的抽屉,里面存放着你的贵重物品。你不希望任何人随意打开抽屉拿走或放入东西,因为这可能会导致物品丢失或损坏。因此,你决定只有在你允许的情况下,别人才能访问抽屉里的物品。
在这个比喻中:
- 抽屉:对应于C#中的字段(Field),它是存储数据的容器。
- 锁:对应于C#中的访问修饰符(如
private),它限制了对字段的直接访问。 - 钥匙:对应于C#中的属性(Property),它是访问和修改字段内容的接口。
当你想要让别人查看或修改抽屉里的物品时,你会给他们钥匙,并告诉他们如何正确使用。同样地,在C#中,属性提供了get和set两个“钥匙”:
get:这个“钥匙”允许别人查看(读取)字段的值,就像打开抽屉看一眼里面的物品一样。set:这个“钥匙”允许别人修改(写入)字段的值,就像打开抽屉放入或替换物品一样。
通过属性,你可以控制何时以及如何允许对字段的访问。例如,你可以在set访问器中添加验证逻辑,确保只有符合特定条件的值才能被写入字段,就像你只允许别人放入特定的物品到抽屉里一样。
总结一下,C#属性就像是带有控制机制的“钥匙”,它允许你以受控的方式访问和修改类的私有字段,同时提供了灵活性和安全性。通过属性,你可以隐藏实现细节,同时提供一个清晰的接口给外部世界使用。
2、实例
using System;
namespace runoob
{class Student{private string code = "N.A";private string name = "not known";private int age = 0;// 声明类型为 string 的 Code 属性public string Code{get{return code;}set{code = value;}}// 声明类型为 string 的 Name 属性public string Name{get{return name;}set{name = value;}}// 声明类型为 int 的 Age 属性public int Age{get{return age;}set{age = value;}}public override string ToString(){return "Code = " + Code +", Name = " + Name + ", Age = " + Age;}}class ExampleDemo{public static void Main(){// 创建一个新的 Student 对象Student s = new Student();// 设置 student 的 code、name 和 ages.Code = "001";s.Name = "Zara";s.Age = 9;Console.WriteLine("Student Info: {0}", s);// 增加年龄s.Age += 1;Console.WriteLine("Student Info: {0}", s);Console.ReadKey();}}
}
3、实例解释
定义了一个名为Student的类,以及一个使用这个类的示例程序。下面我将详细解释这段代码的功能、所使用的算法和具体的执行逻辑。
功能
这段代码的主要功能是创建一个学生信息管理系统中的学生对象,并对其属性进行操作。具体来说,它允许用户设置学生的学号(code)、姓名(name)和年龄(age),并且可以增加学生的年龄。
算法
这段代码并没有使用复杂的算法,而是使用了面向对象编程的基本概念,包括类的定义、属性的封装和方法的重写。
执行逻辑
-
类的定义:代码中定义了一个名为
Student的类,该类有三个私有字段(private fields):code、name和age,分别用于存储学生的学号、姓名和年龄。 -
属性的封装:为了访问和修改这些私有字段,代码中定义了三个公共属性(public properties):
Code、Name和Age。每个属性都有一个get访问器和一个set访问器。get访问器用于获取字段的值,而set访问器用于设置字段的值。这种做法遵循了面向对象编程中的封装原则,即通过属性来控制对字段的访问,从而保护数据不被错误地修改。 -
方法的重写:
Student类重写了ToString()方法,该方法返回一个包含学生信息的字符串。当调用Console.WriteLine()时,如果没有指定格式化字符串,它会自动调用对象的ToString()方法来获取要输出的字符串。 -
示例程序:在
ExampleDemo类的Main()方法中,创建了一个Student对象s,并通过属性设置了学生的学号、姓名和年龄。然后,使用Console.WriteLine()打印出学生的信息。接着,通过增加s.Age的值来模拟学生年龄的增长,并再次打印出学生的信息。最后,调用Console.ReadKey()来等待用户按下一个键,以防止程序立即退出。
相关文章:
人生低谷来撸C#--015 C# 属性(Property)
1、概念 在C#中,属性(Property)是一种特殊的成员,它提供了一种灵活的机制来访问和修改对象的状态(即类的字段)。属性结合了字段和方法的特性,使得数据的访问和修改更加安全和便捷。下面我用一个…...
面试题003:面向对象的特征——封装性
Java规定了4种权限修饰,分别是:private、缺省、protected、public。我们可以使用4种权限修饰来修饰类及类的内部成员。当这些成员被调用时,体现可见性的大小。 封装性在程序中的体现: 场景1:私有化(private)类的属性,提供公共(pub…...
森林防火,森林防火智能储水罐_鼎跃安全
森林防火是保护森林的重要措施,每年发生的森林火灾都严重威胁着自然安全,对社会经济和生态造成严重的破坏。为了切实有效地预防并扑灭森林火灾,森林防火智能储水罐已成为现代森林防火体系中的重要装备。 储水罐内置传感器和控制系统ÿ…...
虚幻引擎,体积雾、体积光、镜头泛光
1、体积雾 这里介绍的是用于地面的体积雾效果,效果如图1-1: 图1-1 首先,需要场景中存在指数级高度雾并开启体积雾(如图1-2)。然后创建材质,材质域选择“体积”,混合模式选择“Additive”。材质节…...
Python 机器学习求解 PDE 学习项目——PINN 求解二维 Poisson 方程
本文使用 TensorFlow 1.15 环境搭建深度神经网络(PINN)求解二维 Poisson 方程: 模型问题 − Δ u f in Ω , u g on Γ : ∂ Ω . \begin{align} -\Delta u & f \quad & \text{in } \Omega,\\ u & g \quad & \text{on } \Gamma:\p…...
微信小程序删除滑块 SwiperCell 自动收起 Van weapp van-swipe-cell 滑块自动收起 点击页面也自动收起滑块
在当前页面整个 view 中 给页面绑定 点击事件bindtap"onSwipeCellPage"给 van-swipe-cell 组件设置 id (for循环可以添加 id"swip-cell-{{item.id}}" )van-swipe-cell 组件 添加属性 当用户打开滑块时触发 bind:open"swiperCel…...
【vluhub】log4j注入漏洞 CVE-2021-44228
LOG4介绍 是一个用Java编写的可靠,快速和灵活的日志框架(API),它在Apache软件许可下发布 log4j存在远程代码执行漏洞、受影响版本2.x 部署环境 攻击机环境:192.168.3.180 kail环境:192.168.203.12【NAT…...
Redis核心技术与实战学习笔记
Redis核心技术与实战学习笔记 最近想沉下心来看下redis,买了蒋德钧老师的《Redis 核心技术与实战》,这里记录一些学习笔记 希望能够坚持下去有想一起学习的童鞋,可以点击跳转到文章尾部获取学习资源,仅供学习不要用于任何商业用途!!! redis知识全景图 …...
力扣经典题目之->设计循环队列 的超详细讲解与实现
一:题目 二:思路讲解 前提: a:本文采取数组来实现队列去解决题目 b:开辟k1个空间,front指向队首,rear指向队尾的后一个,rear这样会更好的判空和判满 以下根据pop和push感受满和空…...
【数据结构】排序算法——Lesson2
Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…...
Ubuntu编译ffmpeg并添加cmake工程
文章目录 前言前提须知为什么要自己编译 FFmpeg前提软件包与工具的安装编译ffmpeg写CMakeList.txt包含ffmpeg到我们项目中 总结 前言 FFmpeg 是一个领先的多媒体框架,能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有人类和机器创造的内容。FFmpeg 包…...
Vue.js[组件(Component)]
什么是: 拥有专属的HTML,CSS,数据的,可重用的页面独立区域 一个页面由多个组件聚合而成一个大型的页面 在代码层面上,一个组件就是一个可反复使用的自定义标签。 vs jq插件 vs boot组件 boot插件: 虽然可重用,但仍需…...
基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)
基于微信小程序SpringBootVue的校园自助打印系统(带1w文档) 基于微信小程序SpringBootVue的校园自助打印系统(带1w文档) 管理信息可以处理复杂的信息从而提高用户的工作效率,减少失误。所以本基于Vue和微信小程序的校园自助打印系统的开发非常有意义,本系…...
qt设置过滤器
1.创建事件过滤器类,在主窗口中安装事件过滤器 class PasteFilter : public QObject {Q_OBJECTpublic:PasteFilter(QObject *parent nullptr) : QObject(parent) {}protected:bool eventFilter(QObject *obj, QEvent *event) override {if (event->type() QEv…...
线上环境服务器CPU飙升排查
前因 收到线上服务器CPU使用率100%的告警信息。 环境 jdk1.8CentOS Linux ;CentOS Linux 排查 查看服务器CPU使用率 果然cpu已经达到了100%了 命令 top 使用arthas工具 使用方式 arthas 执行命令java -jar arthas-boot.jar 然后执行命令 thread 看到有两个…...
unity文字||图片模糊
一.文字模糊 1、增大字体大小后等比缩放 快捷键R 2、更改字体渲染模式 二.图片模糊 1、更改过滤模式 2、更改格式或者压缩 3、如果只是图片边缘看不清,可以增加canvas/图片的每单位参考像素...
香薰学习笔记
1 喷香水的方法 ChatGPT-4o 学习使用香水是提升个人形象的一个好方法。 喷香水的方法如下: 皮肤吸收:香水最好喷在皮肤上,因为皮肤的温度能帮助香水散发出更好的香味。喷在衣服上可能会影响香水的原始味道。脉搏点:将香水喷在脉搏…...
iOS ------ weak的基本原理
1.weak的基本概念 weak弱引用,所引用的对象的引用计数不会加一,引用对象被释放的时候会自动设置为nil多用于解决对象间的相互引用造成内存泄露的循环引用的问题 2.实现原理 Person *object [[Person alloc] init]; id __weak objc object;Runtime维…...
实时更新UI界面
1.处理实时通信,几种方案 1:当一个用户发送一条需要实时更新的信息,我可以直接查找在线用户,通过在线用户来进行判断条件,发送更新请求 2:用户在一个需要实时更新的界面时,就不断的向服务端发…...
为什么Spring不推荐@Autowired用于字段注入
背景 Spring是Java程序员常用的框架之一。官方从Spring 4.0开始不推荐使用Autowired进行字段注入。 Spring注入方式 基于构造器注入:在构造器上使用Autowired。 优点:可以声明字段为final,确保字段在构造时被初始化。 基于setter方法注入&…...
光阀的“第二曲线”:投影行业LCOS技术现状与发展趋势分析
1. 报告导读与核心摘要 在投影显示技术的版图中,LCoS(硅基液晶,Liquid Crystal on Silicon)长期处于一种微妙的位置:它拥有DLP无法比拟的画质潜力,却因成本和体积问题始终未能真正撼动DLP的市场地位。然而,2025-2026年行业展会上的一系列技术突破,正在改写这一格局。 …...
OpenClaw备份方案:GLM-4-7-Flash自动加密重要文件并上传网盘
OpenClaw备份方案:GLM-4-7-Flash自动加密重要文件并上传网盘 1. 为什么需要自动化加密备份 去年的一次硬盘故障让我损失了三个月的项目资料,这件事彻底改变了我对数据安全的认知。传统备份方案要么需要手动操作(容易遗忘)&#…...
Vue项目中使用/deep/报错?手把手教你用::v-deep完美解决样式问题
Vue样式穿透难题:从/deep/到::v-deep的优雅升级指南 在Vue生态中,样式作用域管理一直是开发者们津津乐道的话题。当你在使用第三方UI库时,是否遇到过这样的尴尬:明明在本地开发环境调试好的样式,打包后却神秘失效&…...
【实战解析】从期末试题到工程实践:摄影测量核心概念与计算全攻略
1. 从试卷到工地:摄影测量核心概念实战指南 第一次接触航测项目时,我盯着任务书上的"相机选型""航线规划"等要求完全懵了。这和期末考试那些名词解释、计算题有什么关系?直到在工地摔打半年后才明白,那些看似…...
基于CYBER-VISION零号协议构建智能技术文档翻译与摘要系统
基于CYBER-VISION零号协议构建智能技术文档翻译与摘要系统 1. 引言 对于很多开发者来说,阅读英文技术文档是件挺头疼的事。尤其是遇到一些前沿的开源项目,官方文档全是英文,里面还夹杂着大量的专业术语和复杂的配置说明。有时候,…...
高效转换CSDN博客为Markdown:自动化工具与批量处理技巧
1. 为什么需要将CSDN博客转为Markdown格式 作为一个写了多年技术博客的老鸟,我深刻理解Markdown格式对技术写作的重要性。CSDN的富文本编辑器虽然方便,但存在几个致命问题:格式锁定在平台内、排版灵活性差、迁移成本高。而Markdown作为轻量级…...
ROS2接口实战:从传感器数据到自定义消息的完整开发流程(附Python示例)
ROS2接口实战:从传感器数据到自定义消息的完整开发流程(附Python示例) 在机器人开发领域,数据的高效传递与标准化处理是系统稳定运行的关键。ROS2作为新一代机器人操作系统,其接口系统提供了强大的数据交换能力&#x…...
从零开始理解Transformer的计算复杂度:自注意力与前馈网络的详细对比
从零开始理解Transformer的计算复杂度:自注意力与前馈网络的详细对比 在人工智能领域,Transformer架构已经成为自然语言处理任务的事实标准。但对于初学者来说,理解其内部工作机制,特别是计算复杂度这一关键概念,往往充…...
LIN总线测试避坑指南:为什么你的校验和测试总通不过?从经典型到增强型的实战解析
LIN总线校验和测试全攻略:从算法原理到故障排查的深度实践 在汽车电子系统的开发与测试中,LIN总线作为CAN总线的补充,广泛应用于车门模块、座椅控制、空调系统等对带宽要求不高的场景。而校验和作为LIN报文数据完整性的重要保障,其…...
数据库连接优化:DBeaver连接阻塞问题的系统解决方案
数据库连接优化:DBeaver连接阻塞问题的系统解决方案 【免费下载链接】dbeaver DBeaver 是一个通用的数据库管理工具,支持跨平台使用。* 支持多种数据库类型,如 MySQL、PostgreSQL、MongoDB 等;提供 SQL 编辑、查询、调试等功能&am…...
