C#2.0新增功能07 getter/setter 单独可访问性
属性是一种成员,它提供灵活的机制来读取、写入或计算私有字段的值。 属性可用作公共数据成员,但它们实际上是称为访问器的特殊方法。 这使得可以轻松访问数据,还有助于提高方法的安全性和灵活性。
属性概述
-
属性允许类公开获取和设置值的公共方法,而隐藏实现或验证代码。
-
get 属性访问器用于返回属性值,而 set 属性访问器用于分配新值。 这些访问器可以具有不同的访问级别。 有关详细信息,请参阅限制访问器可访问性。
-
value 关键字用于定义由
set
访问器分配的值。 -
属性可以是读-写属性(既有
get
访问器又有set
访问器)、只读属性(有get
访问器,但没有set
访问器)或只写访问器(有set
访问器,但没有get
访问器)。 只写属性很少出现,常用于限制对敏感数据的访问。 -
不需要自定义访问器代码的简单属性可以作为表达式主体定义或自动实现的属性来实现。
具有支持字段的属性
有一个实现属性的基本模式,该模式使用私有支持字段来设置和检索属性值。 get
访问器返回私有字段的值,set
访问器在向私有字段赋值之前可能会执行一些数据验证。 这两个访问器还可以在存储或返回数据之前对其执行某些转换或计算。
下面的示例阐释了此模式。 在此示例中,TimePeriod
类表示时间间隔。 在内部,该类将时间间隔以秒为单位存储在名为 _seconds
的私有字段中。 名为 Hours
的读-写属性允许客户以小时为单位指定时间间隔。 get
和 set
访问器都会执行小时与秒之间的必要转换。 此外,set
访问器还会验证数据,如果小时数无效,则引发 ArgumentOutOfRangeException。
using System; class TimePeriod { private double _seconds; public double Hours { get { return _seconds / 3600; } set { if (value < 0 || value > 24) { throw new ArgumentOutOfRangeException(string.Format("{0}must be between 0 and 24.",nameof(value))); } _seconds = value * 3600; } } } class Program { static void Main() { TimePeriod t = new TimePeriod(); // 属性分配导致调用“set”访问器 t.Hours = 24; // 检索属性会导致调用“get”访问器。 Console.WriteLine($"Time in hours: {t.Hours}"); } } // 输出结果:Time in hours: 24
成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
BIMFace.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
2、jQuery、Vue.js、Bootstrap、ElementUI
3、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM
4、架构:DDD、ABP、SpringBoot、jFinal
5、环境:跨平台、Windows、Linux、Nginx
6、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch。
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!