黑马程序员--C#中属性和字段(变量)的区别
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
属性为类提供了一种很有用的封装数据的方法。属性的使用简化了语法,如以下两个语句: o.set(o.get()+1); o.value++; 属性的灵活性:使内部数据和外界获取相分离,内部数据的更改不会影响到外界的取得。 GET访问器获取当前的属性值
SET访问器设置当前的属性值,一般不期望有副作用, 如设置一个属性值会同时修改另一个值,有些时候副作用也是非常有用的,如购物车中当用户添加一个新的商品放到购物框中的时候,会自动地修改商品总值。
属性和字段的比较:属性是逻辑的字段值,所谓逻辑就是属性可以返回基于字段的计算值,而字段只能直接返回它本身的值,如person类,它有一个born字段,代表出生日期,还有一个Age属性,该属性可以通过(DateTime.Now- born)计算返回年龄。
属性还可以对外实现数据的验证。属性和字段的相似性: 1.用一个非void类型声明一个名称, as shown: class Example { int field;//声明一个字段 int Property { ... }//声明一个属性 }
2.可以用任意的访问修饰符, as shown: class Example { privat e int field; public int Property { ... } } 3.都可以为静态的, as shown: class Example { static private int field; static public int Property { ... } }
4.可以隐藏基类的同名称的成员, as shown: class Base { public int field; public int Property { ... } } class Example: Base { new public int field; new public int Property { ... } }
5.读和写的语法都一样, as shown: Example o = new Example( ); o.field = 42; o.Property = 42; 属性和字段的不同:属性并没有保存物理数据,不直接存储数据,所以不能把属性当作参数传递给方法。而字段可以。
属性和方法的比较: 1.相似性: Specify statements to be executed.//都是语句用来被执行 n Specify a return type that must be at least as accessible as the property itself.//都有返回类型 n Mark them as virtual, abstract, or override.//都可以标记为虚拟,抽象,重写 n Introduce them in an interface.//都可以在接口中引用 n Provide a separation between an object’s internal state and its public//都是为了分离外部接口和内部状态提供了实现,这是最重要的,因为属性内部的更改不会影响到外部调用的语法。
2.区别:特征 属性 方法圆括号 NO Yes 参数 No Yes Void类型 No Yes 属性的类型
1. 只读(Read-only)属性该属性只有get访问器,没有set访问器,常见的误区是:认为只读属性的值一般都为常数。其实不是这样的,只读属性也可以为变值,可以通过方法来实现初始化,这是一个特例,在内的内部可以实现对只读属性的操作和写入。如下: class BankAccount { private decimal balance; public decimal Balance { get { return balance; } } public void Deposit(decimal amount) { balance += amount;//对balance只读属性进行了加法操作 } ... }
2.只写(Write-only)属性该属性只有一个set访问器,没有get访问器,一般应避免这种情况,因为这各属性是没有任何意义的。 3.静态(Static)属性该属性标记为static,静态属性只跟类有关,不跟类的实例相关联,所以在静态属性中不能对实例字段进行操作,只能对静态字段进行操作。也不能包括vitual,override,abstract修饰符在静态属性中。即时创建:直到它第一次调用的时候才对资源进行初始化,这种技术叫做延迟初始化,如下: public class Console { public static TextReader In { get { if (reader == null) { reader = new StreamReader(...);//如果它是第一次被引用,则它将被初始化 } return reader; } } ... private static TextReader reader = null; }
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
黑马程序员--C#中属性和字段(变量)的区别的更多相关文章
- 关于get和set访问器以及属性和字段变量的区别问题
属性是对一个或者多个字段的封装. 类里面为什么要用一个共有的属性来封装其中的字段,也可以这样说用共有属性来封装私有变量,其中的好处应该大家都说的出来,就是为了实现数据的封装和保证了数据的安全 ...
- iOS中属性与成员变量的区别
一.类Class中的属性property 在ios第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: @interfa ...
- 【转】iOS中属性与成员变量的区别
[转载自并整理 http://blog.csdn.net/itianyi/article/details/8618128] 一.类Class中的属性property 在ios第一版中,我们为输出口同时 ...
- 黑马程序员——Foundation中的OC结构体
<span style="font-size:14px">------<a target="_blank" href="http:/ ...
- 黑马程序员+Winform基础(上)
黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...
- 黑马程序员:Java基础总结----JavaBean 内省
黑马程序员:Java基础总结 JavaBean 内省 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! JavaBean 内省 软件包 java.beans 包含与开 ...
- 黑马程序员:Java基础总结----java注解
黑马程序员:Java基础总结 java注解 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! java注解 lang包中的基本注解 @SuppressWarnings ...
- 黑马程序员+SQL基础(上)
黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...
- 黑马程序员:Java基础总结----静态代理模式&动态代理
黑马程序员:Java基础总结 静态代理模式&动态代理 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public class Ts { ...
随机推荐
- 获取iOS设备信息的编程接口
参考资料: [1] 博客园,iOS屏幕尺寸和分辨率了解 [2] 张兴业,获取手机信息(UIDevice.NSBundle.NSLocale), CSDN
- 例题6-5 Boxes in a line uVa12657
这道题目的解决方案是双向链表,数据结构本身并不复杂,但对于四种情况的处理不够细致,主要体现在以下几点: 分类讨论不全面,没有考虑特殊情况(本身不需要操作,需要互换的两元素相邻) 没有考虑状态4改变后对 ...
- 一路走过的2013,welcome to 2014
驻入博客园,还是在大学时,至今没写过一篇博客,一直都是在看人家写的博客.2014 年第一天,就从这一天,开启博客之旅,与大家分享好书,分享技术,结交好朋友. 简单,介绍下自己,大三实习,因为热衷于互联 ...
- 亚马逊左侧导航(jquery.menuaim.js)
jquery.menuaim.js 主菜单 <div class="active"> <ul class="dropdown-menu" ...
- 使用Eclipse开发,Java Compiler中Annotation Processin不出现的解决方案
第一步:在Eclipse菜单栏中点击Help,在点击inatall New Software 第二步:在Work with中找到 Juno - http://download.eclipse.org/ ...
- select标签用法
<select name="type" class="textarea" onchange='bbbb(this.value)' > <opt ...
- MySQL实战积累
IFNULL(expr1,expr2)的用法:假如expr1不为NULL,则IFNULL()的返回值为 expr1; 否则其返回值为expr2. 索引:http://www.cnblogs.com ...
- Linux系统下sendmail发送邮件失败的问题
问题是:安装完sendmail,启动服务后,发送邮件第一次发送成功,后面再次无论怎么发送都不行,换邮箱也不行.在确认我的邮件发送格式正确无误后,想到查看邮件发送日志: [root@backu ...
- CentOS 6.4 安装搭建 Scrapy 0.22 环境
一.安装Python2.7.6 更新CentOS lib库文件 yum -y update 安装开发工具包 yum groupinstall -y development 安装扩展包 yum inst ...
- rtx信息泄漏利结合弱口令导致被批量社工思路
腾讯通RTX(Real Time eXchange)是腾讯公司推出的企业级实时通信平台. rtx server 存在暴露用户信息的漏洞,通过web访问 http://RtxServerIp:8012/ ...