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

人生低谷来撸C#--015 C# 属性(Property)

1、概念

在C#中,属性(Property)是一种特殊的成员,它提供了一种灵活的机制来访问和修改对象的状态(即类的字段)。属性结合了字段和方法的特性,使得数据的访问和修改更加安全和便捷。下面我用一个通俗的比喻来帮助你理解属性:

想象一下你有一个带锁的抽屉,里面存放着你的贵重物品。你不希望任何人随意打开抽屉拿走或放入东西,因为这可能会导致物品丢失或损坏。因此,你决定只有在你允许的情况下,别人才能访问抽屉里的物品。

在这个比喻中:

  • 抽屉:对应于C#中的字段(Field),它是存储数据的容器。
  • :对应于C#中的访问修饰符(如private),它限制了对字段的直接访问。
  • 钥匙:对应于C#中的属性(Property),它是访问和修改字段内容的接口。

当你想要让别人查看或修改抽屉里的物品时,你会给他们钥匙,并告诉他们如何正确使用。同样地,在C#中,属性提供了getset两个“钥匙”:

  • 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),并且可以增加学生的年龄。

算法

这段代码并没有使用复杂的算法,而是使用了面向对象编程的基本概念,包括类的定义、属性的封装和方法的重写。

执行逻辑

  1. 类的定义:代码中定义了一个名为Student的类,该类有三个私有字段(private fields):codenameage,分别用于存储学生的学号、姓名和年龄。

  2. 属性的封装:为了访问和修改这些私有字段,代码中定义了三个公共属性(public properties):CodeNameAge。每个属性都有一个get访问器和一个set访问器。get访问器用于获取字段的值,而set访问器用于设置字段的值。这种做法遵循了面向对象编程中的封装原则,即通过属性来控制对字段的访问,从而保护数据不被错误地修改。

  3. 方法的重写Student类重写了ToString()方法,该方法返回一个包含学生信息的字符串。当调用Console.WriteLine()时,如果没有指定格式化字符串,它会自动调用对象的ToString()方法来获取要输出的字符串。

  4. 示例程序:在ExampleDemo类的Main()方法中,创建了一个Student对象s,并通过属性设置了学生的学号、姓名和年龄。然后,使用Console.WriteLine()打印出学生的信息。接着,通过增加s.Age的值来模拟学生年龄的增长,并再次打印出学生的信息。最后,调用Console.ReadKey()来等待用户按下一个键,以防止程序立即退出。

http://www.lryc.cn/news/405387.html

相关文章:

  • 面试题003:面向对象的特征——封装性
  • 森林防火,森林防火智能储水罐_鼎跃安全
  • 虚幻引擎,体积雾、体积光、镜头泛光
  • Python 机器学习求解 PDE 学习项目——PINN 求解二维 Poisson 方程
  • 微信小程序删除滑块 SwiperCell 自动收起 Van weapp van-swipe-cell 滑块自动收起 点击页面也自动收起滑块
  • 【vluhub】log4j注入漏洞 CVE-2021-44228
  • Redis核心技术与实战学习笔记
  • 力扣经典题目之->设计循环队列 的超详细讲解与实现
  • 【数据结构】排序算法——Lesson2
  • Ubuntu编译ffmpeg并添加cmake工程
  • Vue.js[组件(Component)]
  • 基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)
  • qt设置过滤器
  • 线上环境服务器CPU飙升排查
  • unity文字||图片模糊
  • 香薰学习笔记
  • iOS ------ weak的基本原理
  • 实时更新UI界面
  • 为什么Spring不推荐@Autowired用于字段注入
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十九章 Linux MISC驱动
  • 基于MobileNetv2的垃圾分类函数式自动微分-昇思25天打卡
  • STM32CubeIDE(CAN)
  • GO Channel使用详解(各种场景下的最佳实践)
  • SwiftUI 5.0(iOS 17)滚动视图的滚动目标行为(Target Behavior)解惑和实战
  • picker 构建记录
  • Docker部署kafka,Docker所在宿主机以外主机访问
  • 控制欲过强的Linux小进程
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • Docker Desktop安装
  • 《Towards Black-Box Membership Inference Attack for Diffusion Models》论文笔记