c#中的属性和字段

属性为类提供了一种很有用的封装数据的方法。 属性的使用简化了语法,如以下两个语句: 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; }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值