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

C#对象和类型

属性、方法、字段

 


字段和属性的区别

在C#中,字段(fields)和属性(properties)都是类的成员,它们提供了类存储数据的方式,但它们在用途和功能上有着明显的区别。

        字段
        字段通常用来存储类或结构的状态信息。字段是类的数据成员,通常被用来定义类的存储数据。它们可以是任何类型:内置类型、用户定义的类型、内置或用户定义的委托等。

        1、字段可以是public、private、protected、internal 或 protected internal等访问修饰符修饰的。
        2、通常,字段应该被声明为private(或protected),以隐藏类的实现细节,并通过属性或方法来访问,这是封装的一种表现。
        属性
        属性像是类的特殊方法,称为访问器(accessors)。这使得你能够对类成员的访问进行更细粒度的控制。属性允许执行读取(get)和写入(set)操作,并在这些操作中加入额外的逻辑。

        1、属性提供了一种访问字段的方式,同时不暴露类的实现细节。通过get和set访问器,可以控制字段的读写权限,也可以添加额外的逻辑,比如验证输入数据。
        2、使用属性可以实现数据的封装和保护,因为你可以设置字段为private,仅通过属性对其进行访问和修改。
        3、属性可以是只读的(只有get),只写的(只有set),或者既有读也有写。
        字段和属性的区别
        1、封装:字段通常用于类内部的数据存储,而属性提供了一种控制字段访问的机制,实现数据的封装和保护。
        2、控制逻辑:通过属性的get和set访问器,可以在读写数据时添加特定的逻辑,比如数据验证或修改其他字段的值。字段不提供这种控制机制。
        3、绑定支持:在某些情况下,如数据绑定方面,通常需要使用属性而非字段,因为很多框架和库是通过属性进行数据绑定的。
        4、设计原则:按照C#的设计原则,公共数据成员应该被声明为属性而不是公共字段。即使是简单的数据存取,也推荐使用自动属性(auto-implemented properties)来提供更好的封装。
示例

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字段被封装起来,不可以直接从类的外部访问。Name属性提供了对name字段的受控访问,它包含了额外的逻辑来验证输入,避免无效赋值。
————————————————

                       部分引用链接

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 每日一题——贪心算法
  • 设计模式:模板方法模式:封装不变,扩展可变
  • 使用 Python 对雷达卫星 sar 图像进行降噪的三种方法
  • 使用PasteSpider实现类似Jenkins的功能,让你的2G服务器也可以飞起
  • Scrapy框架在处理大规模数据抓取时有哪些优化技巧?
  • Spring实现自定义注解
  • PHP开发【石头剪刀布小游戏】
  • 04-Fastjson反序列化漏洞
  • 麻雀搜索算法(SSA)与长短期记忆网络(LSTM)结合的预测模型(SSA-LSTM)的Python 和 MATLAB实现
  • 文档在线预览:keking/kkFileView踩坑记
  • 精通Perl代码优化:释放自定义优化技术的力量
  • 微软蓝屏事件:全球网络安全与系统稳定性的警示
  • Unity获取Animator动画播放完成事件
  • 第三十一天 chrome调试工具
  • 2023-2024年 Java开发岗面试题经验分享
  • (三)从jvm层面了解线程的启动和停止
  • [LeetCode] Wiggle Sort
  • ES学习笔记(12)--Symbol
  • HashMap ConcurrentHashMap
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • java第三方包学习之lombok
  • laravel 用artisan创建自己的模板
  • Twitter赢在开放,三年创造奇迹
  • windows下如何用phpstorm同步测试服务器
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 将回调地狱按在地上摩擦的Promise
  • 前嗅ForeSpider教程:创建模板
  • 用Python写一份独特的元宵节祝福
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • PostgreSQL之连接数修改
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • ### RabbitMQ五种工作模式:
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • $jQuery 重写Alert样式方法
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (35)远程识别(又称无人机识别)(二)
  • (LeetCode) T14. Longest Common Prefix
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (三分钟)速览传统边缘检测算子
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四) 虚拟摄像头vivi体验
  • (算法)Game
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (一)u-boot-nand.bin的下载
  • (译) 函数式 JS #1:简介
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转载)Google Chrome调试JS
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 管理用户机密