学懂C#编程:属性(Property)的概念定义及使用详解

        

在C#中,属性(Property)是一种特殊的类成员,它提供了一种灵活的机制来读取、写入或计算私有字段的值。属性使得类的字段可以像公共数据成员一样被访问,同时还可以在访问时执行自定义的逻辑,如数据验证、计算等。属性通常用于封装类的内部状态,提高代码的可维护性和安全性。

属性的基本概念

属性由两个访问器组成:get 访问器和 set 访问器。get 访问器用于返回属性的值,set 访问器用于设置属性的值。属性可以是只读的(只有 get 访问器)、只写的(只有 set 访问器)或读写的(同时有 getset 访问器)。

属性的定义

属性的定义通常遵循以下格式:

public class MyClass
{private int myField; // 私有字段// 属性public int MyProperty{get{return myField;}set{myField = value;}}
}

在这个示例中,MyProperty 是一个属性,它封装了私有字段 myFieldget 访问器返回 myField 的值,set 访问器将传入的值(通过 value 关键字)赋给 myField

属性的使用

属性的使用与公共字段类似,但可以在访问时执行额外的逻辑。

MyClass obj = new MyClass();
obj.MyProperty = 42; // 调用 set 访问器
int value = obj.MyProperty; // 调用 get 访问器

示例:带验证的属性

下面的示例展示了如何使用属性来验证输入值:

public class Person
{private string name;public string Name{get{return name;}set{if (string.IsNullOrEmpty(value)){throw new ArgumentException("Name cannot be null or empty.");}name = value;}}
}

在这个示例中,Name 属性在设置值时会检查输入是否为空或 null,如果是,则抛出一个异常。

自动实现的属性(Auto-Implemented Properties)

C# 还提供了自动实现的属性,这种属性在定义时不需要显式声明私有字段,编译器会自动生成一个隐藏的私有字段。

public class Person
{public string Name { get; set; }
}

自动实现的属性使得代码更加简洁,但在某些情况下可能需要自定义 getset 访问器的逻辑。

只读和只写属性

只读属性只有 get 访问器,只写属性只有 set 访问器。

public class Circle
{private double radius;public Circle(double radius){this.radius = radius;}public double Radius{get{return radius;}}public double Area{get{return Math.PI * radius * radius;}}
}

在这个示例中,Radius 是只读属性,Area 是只读属性并且其值是通过计算得到的。

总结

属性是C#中用于封装类字段的一种机制,它提供了对字段的访问控制和额外的逻辑处理能力。属性可以是读写的、只读的或只写的,并且可以使用自动实现的属性来简化代码。属性提高了代码的可读性、可维护性和安全性。

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

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

相关文章

解决loguru在multiprocessing并发场景下子线程日志无法记录到文件问题

logger对象在创建时必须从父进程传递给子进程才能记录日志,有两种传递方式: 第一种:通过类定义一个日志变量,然后外部传入logger对象来记录日志。 # workers_a.py class Worker:_logger Nonestaticmethoddef set_logger(logger…

中英双语介绍日本东京(Tokyo)

中文版 东京介绍 东京是日本的首都,也是日本的政治、经济、文化和国际交流中心。以下是对东京的详细介绍,包括其地理位置、人口、经济、教育、文化和主要景点。 地理位置 东京位于日本关东地区的南部,地理坐标大致为北纬35度41分&#xf…

C语言_练习题

求最小公倍数 思路:假设两个数,5和7,那么最小至少也要7吧,所以先假定最小公倍数是两个数之间较大的,然后看7能不能同时整除5和7,不能就加1继续除 int GetLCM(int _num1, int _num2) {int max _num1>_n…

C++11中新特性介绍-之(二)

11.自动类型推导 (1) auto类型自动推导 auto自动推导变量的类型 auto并不代表某个实际的类型,只是一个类型声明的占位符 auto并不是万能的在任意场景下都能推导,使用auto声明的变量必须进行初始化,以让编译器推导出它的实际类型,…

直接交付和间接交付

路由器在IP数据包的传输过程中,根据源主机与目的主机是否位于同一物理网络,会采用直接交付或间接交付两种方式。以下是对这两种交付方式的清晰归纳: 一、直接交付 定义: 直接交付发生在源主机与目的主机位于同一个物理网络时&a…

Laravel语言之桥:本地化与国际化的实现艺术

标题:Laravel语言之桥:本地化与国际化的实现艺术 Laravel框架提供了一套强大的国际化(Internationalization,简称I18n)和本地化(Localization,简称L10n)支持,使得开发者…

Python入门 2024/7/6

目录 数据容器入门 列表的定义语法 基本语法 嵌套列表 ​编辑 列表的下表索引 ​编辑 列表的常用操作 列表的常见方法 查找元素的下标 修改下标索引的值 插入元素 追加元素 追加一批元素 删除元素 删除某元素在列表中的第一个匹配项 清空列表内容 统计元素在…

深入理解 CSS 选择器:全面指南

简述:CSS(层叠样式表)选择器是网页设计和开发中至关重要的工具。它们用于选择 HTML 元素并应用样式,使得网页变得美观和具有交互性。这里来记录一下,各种 CSS 选择器及其使用方法。 一. Css各种选择器的权重 !importa…

Ansible主机清单

华子目录 管理Ansible静态清单1.定义主机清单2.两种方式定义主机清单3.使用静态主机清单指定受管主机(默认)3.1产生原因3.2静态主机清单文件本质3.3清单内容分析(不分组)3.4清单内容分析(分组)3.5通过范围简…

void *指针与其他类型指针间赋值

#include<stdio.h> int main() {int a;int *p = &a;void *z = p;char *c = z; }上面的代码编译并不一定会有报错和告警信息,但有些是需要注意的。 分析: int a;:定义了一个整型变量a。 int *p = &a;:定义了一个指向整型变量的指针p,指向变量a的地址。 void…

2024亚太杯中文赛数学建模B题完整论文讲解(含每一问python代码+结果+可视化图)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛B题洪水灾害的数据分析与预测完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人…

web服务之Nginx

web服务之Nginx &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Li…

将IConfiguration对象转换成一个具体的对象,以面向对象的方式来使用配置

我们倾向于将IConfiguration对象转换成一个具体的对象&#xff0c;以面向对象的方式来使用配置&#xff0c;我们将这个转换过程称为配置绑定。除了将配置树叶子节点配置节的绑定为某种标量对象外&#xff0c;我们还可以直接将一个配置节绑定为一个具有对应结构的符合对象。除此…

电脑截图的快捷键

以下是几种电脑截图的快捷键&#xff1a; Windowsshifts&#xff1a;矩形截图、任意形状截图、全屏截图&#xff08;需要安装office2010以后的版本&#xff0c;有onenote这附件&#xff09;1CtrlAltR&#xff1a;页面区域截屏CtrlAltV&#xff1a;可视页面截屏CtrlAltH&#x…

C++中的进程和线程的通信交互

一.死锁的问题 原因&#xff1a;多个进程或线程共享资源造成的一种僵持状态&#xff1a;1.竞争系统资源&#xff1b;2.进程的推进顺序不当&#xff1b; 产生的必要条件&#xff1a;1.互斥条件&#xff1b;2.请求和保持条件&#xff1b;3.不可剥夺条件&#xff1b;4.环路等待条…

【音视频 | RTSP】RTSP协议详解 及 抓包例子解析(详细而不赘述)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

华为开发者大会2024纪要:鸿蒙OS的全新篇章与AI大模型的革命

华为开发者大会2024纪要:鸿蒙OS的全新篇章与AI大模型的革命 在科技的浪潮中,华为再次引领潮流,2024年的开发者大会带来了一系列令人瞩目的创新成果。从鸿蒙操作系统的全新Beta版到盘古大模型的震撼发布,华为正以前所未有的速度重塑智能生态。以下是本次大会的亮点,让我们…

中英双语介绍四大会计师事务所(Big Four accounting firms)

中文版 “四大会计师事务所”&#xff08;Big Four accounting firms&#xff09;是全球最具影响力和规模最大的四家专业服务公司&#xff0c;它们在审计、税务、咨询和财务咨询等领域占据着主导地位。这四家公司分别是普华永道&#xff08;PwC&#xff09;、德勤&#xff08;…

MUNIK解读ISO26262--系统架构

功能安全之系统阶段-系统架构 我们来浅析下功能安全系统阶段重要话题——“系统架构” 目录概览&#xff1a; 系统架构的作用系统架构类型系统架构层级的相关安全机制梳理 1.系统架构的作用 架构的思维包括抽象思维、分层思维、结构化思维和演化思维。通过将复杂系统分解…

哨兵1SAR空间数据包协议数据单元文档(七)

《哨兵1SAR空间数据包协议数据单元》文档对数据包的结构进行了详细描述&#xff0c;并提供了用户数据的格式和解码算法。 原文链接: 哨兵1SAR空间数据包协议数据单元文档英文版 同系列中的其他文章篇链接: 哨兵1SAR空间数据包协议数据单元文档&#xff08;一&#xff09; 哨兵…