黑马程序员--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 { ...
随机推荐
- zedboard U盘挂载+交叉编译helloworld
交叉编译环境见http://blog.csdn.net/xiabodan/article/details/22717175 1:编写hello.c文件 #include<stdio.h> ...
- Mongodb Java Driver 参数配置解析
要正确使用Mongodb Java Driver,MongoClientOptions参数配置对数据库访问的并发性能影响极大. connectionsPerHost:与目标数据库能够建立的最大conn ...
- PHP中include和require绝对路径、相对路径问题
在写PHP程序时,经常要用到include或require包含其他文件,但是各文件里包含的文件多了之后,就会产生路径问题. 如下目录: <web>(网站根目录) ├<A>文件夹 ...
- GITHUB基础使用教程
windows系统下: 1.安装完成后,还需要最后一步设置,在命令行输入: $ git config --global user.name "Your Name" $ git ...
- Docker无法启动 Could not find a free IP address range for interface 'docker0' 最方便的解决办法
阿里云的CentOS 6.5上安装Docker会无法启动,如果直接运行docker -d会看到错误提示:Could not find a free IP address range for inter ...
- python杂记-6(time&datetime模块)
#!/usr/bin/env python# -*- coding: utf-8 -*-import timeprint(time.clock())##返回处理器时间,3.3开始已废弃 , 改成了ti ...
- URI、URL以及URN的区别
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源.而URL是uniform resource locator,统一资源定位器,它是一种具体 ...
- python autopy
今天学习了python autopy 主要包括alert,color,mouse,key,bitmap,screen等的操作 文档在http://www.autopy.org/documentatio ...
- CentOS thrift python demo
编辑接口文件 hellowworld.thrift service HelloWorld { string ping(), string say(1:string msg) } 编辑 server.p ...
- MySQL显示连接的数据库名
在默认下,MySQL在use databasename的时候,是不显示连接的库名! mysql> show databases;+--------------------+| Database ...