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

C#-属性

(C#)属性(property)

属性是字段和方法的一个交集。看起来像是一个字段,行为上又像是一个方法。
是类维持了封装性,有可以方便地使用字段。
- 访问属性的语法和访问一个字段(类成员)的语法是相同的。(
- 实际上,编译器自动转换为对特定accessor方法(取值和赋值方法统称为accessor方法)的调用

属性的声明如下:

 

  1. AccessModifier Type PropertyName   
  2. {  
  3. get  
  4. {  
  5. //取值代码 (get accessor )   
  6. }  
  7. set  
  8. {  
  9. //赋值代码 (set accessor )  
  10. }  
  11. }  

 

举例如下:配置ScreenPosition 的属性.

 

  1. struct ScreenPosition  
  2. {  
  3. //小写的x,y是私有字段  
  4. private int x, y;   
  5.   
  6. public ScreenPosition(int X, int Y)  
  7. {  
  8. this.x = rangeCheckedX(X);  
  9. this.y = rangeCheckedY(Y);  
  10. }  
  11.   
  12. //大写的X,Y是公用属性  
  13. public int X  
  14. {  
  15. get { return this.x; }  
  16. set { this.y = rangeCheckedX(value); }  
  17. }  
  18.   
  19. public int Y  
  20. {  
  21. get { return this.y; }  
  22. set { this.y = rangeCheckedY(value); }  
  23. }  
  24.   
  25. private static int rangeCheckedX(int x) { ... }  
  26. private static int rangeCheckedY(int y) { ... }  
  27.   
  28. }  

 

使用属性.

 

  1. ScreenPosition origin = new ScreenPosition ( 0, 0 ) ;   
  2. int xpos = origin.X ; // 实际调用 origin.X.get   
  3. origin.Y = 100 ; // 实际调用 origin.Y.set  

 

只读属性 - 有get 没有 set .
只写属性 - 有set 没有 get

在接口中声明属性.
- 将get accessor 或 set accessor 主体替换成一个分号 . 

 

 

  1. interface IScreenPosition  
  2. {  
  3.     int X { get; set; }  
  4.     int Y { get; set; }  
  5. }  

 

既然有了Field(字段),又有了Property(属性),那么在OOP的过程中,什么时候用Field,什么时候用Property呢?

一般的原则是,类的封装性原则,Field为Private,类的实例中使用,而Property是类暴漏给外面的接口,可以进行读取,设置操作。

 

 

 

属性、和字段的区别

 

相同点:

都是类的成员,属性是类的属性,而字段是类色数据成员

不同点:


1 属性可进行数据绑定
2 属性可通过set和get方法进行数据安全性检验,而字段不行
3 属性可进行线程同步

4 属性可以是抽象的,而字段不行
5 属性可以接口的形式表现
6 基于属性的索引
7 不要直接把字段转化为属性

8 字段在值的处理上并不是那么的灵活,给它赋什么它就是什么,不允许经过逻辑处理。如果把一个人的身高写成一个字段,给它赋值1000M,这显示是不正常的数据,字段无法处理这种特殊数据。
9 与字段不同,属性不作为变量来分类。因此,不能将属性作为 ref参数或 out参数传递。

转载于:https://www.cnblogs.com/wuzehao/p/5361217.html

相关文章:

  • 2的幂的合并运算实例
  • 【curl】cookie的分隔符
  • 从零开始学数据库(一)——安装、启动、进入、创建表、检查表结构、类型说明、更改表项名、插入值...
  • Ruby之基本数据类型(三)
  • 机器学习:eclipse中调用weka的Classifier分类器代码Demo
  • 线程同步工具(一)控制并发访问资源
  • Solr schema编写指导
  • Azkaban的Web Server源码探究系列14:创建Project
  • 成都Uber优步司机奖励政策(4月11日)
  • Tomcat6.0数据源配置
  • 同步和Java内存模型(四)有序性
  • git命令的简单使用
  • lintcode:买卖股票的最佳时机 I
  • PHP处理一个5G文件,使用内存512M的,数据为整形,从大到小排序,优化排序算法...
  • c++的this指针
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • classpath对获取配置文件的影响
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • golang 发送GET和POST示例
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript DOM 10 - 滚动
  • Ruby 2.x 源代码分析:扩展 概述
  • SOFAMosn配置模型
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Spring Cloud中负载均衡器概览
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 初探 Vue 生命周期和钩子函数
  • 欢迎参加第二届中国游戏开发者大会
  • 前嗅ForeSpider采集配置界面介绍
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 问题之ssh中Host key verification failed的解决
  • 延迟脚本的方式
  • 硬币翻转问题,区间操作
  • 原生 js 实现移动端 Touch 滑动反弹
  • - 转 Ext2.0 form使用实例
  • 阿里云重庆大学大数据训练营落地分享
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​ssh免密码登录设置及问题总结
  • #1015 : KMP算法
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (二)JAVA使用POI操作excel
  • (二)Linux——Linux常用指令
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (五)IO流之ByteArrayInput/OutputStream
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Linux下编译安装log4cxx
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core 成都线下面基会拉开序幕
  • .NET Micro Framework初体验(二)