---------------------- 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#中属性和字段(变量)的区别的更多相关文章

  1. 关于get和set访问器以及属性和字段变量的区别问题

    属性是对一个或者多个字段的封装.      类里面为什么要用一个共有的属性来封装其中的字段,也可以这样说用共有属性来封装私有变量,其中的好处应该大家都说的出来,就是为了实现数据的封装和保证了数据的安全 ...

  2. iOS中属性与成员变量的区别

    一.类Class中的属性property 在ios第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: @interfa ...

  3. 【转】iOS中属性与成员变量的区别

    [转载自并整理 http://blog.csdn.net/itianyi/article/details/8618128] 一.类Class中的属性property 在ios第一版中,我们为输出口同时 ...

  4. 黑马程序员——Foundation中的OC结构体

    <span style="font-size:14px">------<a target="_blank" href="http:/ ...

  5. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

  6. 黑马程序员:Java基础总结----JavaBean 内省

    黑马程序员:Java基础总结 JavaBean 内省   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! JavaBean  内省 软件包 java.beans 包含与开 ...

  7. 黑马程序员:Java基础总结----java注解

    黑马程序员:Java基础总结 java注解   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! java注解 lang包中的基本注解 @SuppressWarnings ...

  8. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  9. 黑马程序员:Java基础总结----静态代理模式&动态代理

    黑马程序员:Java基础总结 静态代理模式&动态代理   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public  class  Ts {   ...

随机推荐

  1. 【Qt】Qt之重启应用程序【转】

    简介 今天分享的内容有些意思-如何重启一个应用程序.其实,有时候这是一个很重要的功能点,而且很人性化.易用性很好. 例如:切换用户.当某个用户登录成功之后,需要切换到其它账号,那么这时,你就知道它的重 ...

  2. MongoDB 备份方法

    翻译自 http://docs.mongodb.org/manual/core/backups/ 有以下几种方法来备份MongoDB群集: 通过复制底层数据文件来备份 通过mongodump来备份 通 ...

  3. (转)汉字转拼音HanziToPinyin

    本文转载于:http://blog.csdn.net/zhangphil/article/details/47164665 Android系统本身自带有有将汉字转化为英文拼音的类和方法.具体的类就是H ...

  4. openerp模块收藏 移除下拉选择列表中的“创建并编辑”链接(转载)

    移除下拉选择列表中的“创建并编辑”链接 原文:http://shine-it.net/index.php/topic,5990.0.html 有时希望下拉列表中列出的项是与主表某个字段关联的,用户只能 ...

  5. C# 文件管理类 Directory

    今天简单接触了一下C#的文件管理类,对类的大体功能做了简单的了解; 做项目用于判断文件是否存.在创建文件.删除文件较为常用:今天大体总结文件调取功能: public string GetFile() ...

  6. CodeForces 478B 第八次比赛 B题

    Description n participants of the competition were split into m teams in some manner so that each te ...

  7. 【转】 申请对齐某种结构体大小的buffer

    在大多数情况下,编译器和C库透明地帮你处理对齐问题.POSIX 标明了通过malloc( ), calloc( ), 和 realloc( ) 返回的地址对于任何的C类型来说都是对齐的.在Linux中 ...

  8. Seafile V4.1 安装笔记

    yum -y install gcc gcc-c++ make cmake pcre pcre-devel expat expat-devel curl wget mlocate gd gd-deve ...

  9. SQL Server中如何用mdf,ldf文件还原数据库

    不论是手动还原还是写个脚本还原,首先都要修改文件的属性为可读写,另外这个用户能够修改 1.手动Attach 2.写个脚本还原 我个人比较喜欢写个脚本去还原 Exec sp_attach_db @dbn ...

  10. 多线程中,static函数与非static函数的区别?

    最近在学习多线程,刚入门,好多东西不懂,下面这段代码今天想了半天也没明白,希望看到的兄弟姐妹能解释下. public class NotThreadSafeCounter extends Thread ...