属性和字段的区别和联系
问题:C#语法中针对类中数据成员的访问引见的属性和字段概念和C++相比,C++中只要属性(觉得相当于于C#中的字段),但是在运用C#过程中,假入本人要写一个类,包含几个数据成员(即字段)但是为了让外边能够访问还需求写对应的属性出来,岂不是有点费事?使用属性的优点是什么?
在C#中,我们可以非常自由的、毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋值于某个范围、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个模块:set和get,set模块负责属性的写入工作,get模块负责属性的读取工作。在两个模块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。
class Product //商品类 { //私有字段 private string _Pname; //商品名称 private bool _IsNoEmperty; //是否有库存 private float _Price; //商品单价 private int _PCount; //商品数量 //属性: //可读写 public string Pname { set { _Pname = value; } get { return _Pname; } } //只读 public bool IsNoEmperty { get { return _IsNoEmperty; } } //可检测赋值是否正确 public float Price { set { if (value >= 0) _Price = value; else throw new Exception("Price的赋值范围"); } get { return _Price; } } //赋值时更改其他状态 public int PCount { set { _PCount = value; _IsNoEmperty = true; //改变了_IsNoEmperty字段的值 } get { return _PCount; } }
public void Print() { Console.WriteLine("产品信息如下:"); Console.WriteLine("产品名称:{0}",_Pname); Console.WriteLine("产品价格:{0}", _Price); Console.WriteLine("库存数量:{0}", _PCount); Console.ReadLine(); } static void Main(string[] args) { Product P1=new Product(); P1.Pname="黑人牙膏(克)"; P1.Price=5; P1.PCount=20; P1.Print(); } }
小结:引入属性的优点
1.维护私有字段(保证类的封装性)
2.可控制访问(只读/只写,确保赋值的正确性等)
3.不用注重细节(直接使用,不需要考虑复杂的处理代码)
至于引入属性的益处在更多的c#程序中会领会的愈加深入
问题:什么情况下选择使用字段还是属性?
从例子中可看到属性其实就是对私有字段的读取和写入,以便做些公有字段无法完成的任务,他的使用方式和公有字段完全一样,所以可以理解成属性是为了满足对公有字段的特殊需求而产生的附属品。因而当我们选择使用属性还是使用字段时,主要看需求,如果不需设置访问权限、不需在赋值时检测值是否满足要求、不需要在赋值时修改对象其他一些状态等特殊的需求时,使用公有字段即可,否则就使用属性。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤