属性为类提供了一种很有用的封装数据的方法。属性的使用简化了语法,如以下两个语句: 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; }
原文:http://www.cnblogs.com/zxh930508/p/3544467.html