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

属性与字段的区别

 

首先从两者的声明上来看,公共字段只是类用public修饰符所公开的简单公共变量,而属性则是对字段的封装,它使用get和set访问器来控制如何设置或返回字段值。

由于属性的实质是方法(get或set方法),在IL中是没有属性的概念的。所以对于开发过程中常用的赋值和取值操作来说,使用公共变量肯定会比使用属性速度要快,性能上也稍高(方法和变量哪个速度不用说了吧)。

公共字段虽然在速度上快,但它必须开放字段为public,这样一来对象的调用者便可以直接修改其值,值的内容是否合法,运行中是否会出错,就没有了保障,进而会大大降低类的可重用性;相反,属性类似于方法,它可以对存入的变量的值进行处理,如果觉得该值不合法,可以就地变换或者直接提出警告。这对该类的对象的使用安全有很大好处,在运行过程中,因公共变量值的错误而产生的问题会大大减少。

从上述内容来看,两者各有优缺点,在实际项目开发过程中,我们究竟选择使用哪一种方式呢?

如果满足下面几个条件,那么我们便可以大胆地使用公共字段:

1. 允许自由读写;

2. 取值范围只受数据类型约束而无其他任何特定限制;

3. 值的变动不需要引发类中其它任何成员的相应变化;

属性的使用条件则恰好跟变量相反,只要满足下面任何一个条件,就应该使用属性:

1. 要求字段只能读或者只能写;

2. 需要限制字段的取值范围;

3. 在改变一个字段的值的时候希望改变对象的其它一些状态;

总结:虽然在实际项目的开发过程中,公共字段和属性在合适的条件下都可以使用,但是我们应该尽可能的使用属性(property),而不是数据成员(field);把所有的字段都设置为私有字段,如果要暴露它们,则把它们封装成属性,这也是微软推荐的方式。



原文链接:http://www.cnblogs.com/netlyf/archive/2010/12/20/1910977.html

转载于:https://www.cnblogs.com/Percy_Lee/p/5156048.html

相关文章:

  • 使用OGGquot;Loading data from file to Replicatquot;的方法应该注意的问题:replicat进程是前台进程...
  • java 单例模式总结
  • MAC下配置OpenCV的具体方法(2016年最新)
  • iOS 后台操作的开发(转)
  • Number 类型
  • 关于Oracle数据库分页查询的小技巧
  • Java重定向标准输入/输出
  • Show Processlist
  • FZU2150 Fire Game BFS搜索
  • input文本框只能输入数字
  • Android百度地图 关于visibility=gone的奇葩问题
  • http://my.oschina.net/chihz/blog/56256
  • Graphviz 绘制流程图
  • 无法启动配置好的虚拟机
  • 2015年度年终总结
  • 收藏网友的 源程序下载网
  • 【面试系列】之二:关于js原型
  • Angularjs之国际化
  • Apache的80端口被占用以及访问时报错403
  • CSS实用技巧干货
  • C学习-枚举(九)
  • Java精华积累:初学者都应该搞懂的问题
  • Linux中的硬链接与软链接
  • sessionStorage和localStorage
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 电商搜索引擎的架构设计和性能优化
  • 给第三方使用接口的 URL 签名实现
  • 缓存与缓冲
  • 漂亮刷新控件-iOS
  • 七牛云假注销小指南
  • 如何设计一个微型分布式架构?
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 移动端解决方案学习记录
  • NLPIR智能语义技术让大数据挖掘更简单
  • #pragma预处理命令
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET Core 2.1路线图
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET微信公众号开发-2.0创建自定义菜单
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [ C++ ] STL---string类的模拟实现
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Android]通过PhoneLookup读取所有电话号码
  • [Angular] 笔记 8:list/detail 页面以及@Input