“暴露”阶段:值->行为(函数)->行为(函数)的参数;打个比方,这就好象“穿得越多,而暴露得就越少”。语言亦是如此。
属性之所以在体系中具有重要意义,是因为它可以承担类与类关联的消息人角色。
我们知道,低耦合的重要手段之一便是封装,那么在C#的语言概念到达更高的层次之前,对于C#两大类型之一的值类型,必须进行处理,而其中首当其冲的便是变量。对变量进行封装的重要手段,便是属性--属性的本质是系统封装的变量。
[MSDN C#2.0]
1.字段
字段作为类成员直接存在于类定义中,而在函数中定义的叫变量。
(1)在.net事件模型中的发生时刻,处在调用对象实例的构建子(constructor)之前。所以如果构建子存在对字段赋值的行为,那么它将覆盖字段声明期间给定的任何值。
(2)字段可选地(optionally)能够被声明为static,这使得该字段无须实例化便对任何调用者(caller)可得(available)。
(3)如果字段的访问子(accessor)被定义为readonly,则它只能在初始化时或通过构建子赋值,其它的赋值都将是非法的。
(4)static readonly 字段和常数(constant)类似,只不过C# 编译器不能在编译时访问它的值,而在运行时才可以。
2.属性
提供了某环境(问题域)中对字段访问的遮断能力:它继承于C++和Java使用的访问子概念,结合了字段字义和访问子(getter/setter方法),故又称之为聪明字段(smart fields)。属性,可以看作对数据的封装。
// Address class example using standard accessors保守的方式:访问子 class Address { protected string City; protected string ZipCode; public string GetZipCode() { return this.ZipCode; } public void SetZipCode(string ZipCode) { // Validate ZipCode against some data store. this.ZipCode = ZipCode; // Update this.City based on validated ZIP code. } }
(1)属性的一个特点是可携带访问器-即,读取由getter处理,写入由setter处理;
(2)具有getter和setter的属性,那么称该属性是可读写(read-write)的;自然,没有setter,该属性就是只读的(read-only);只有setter,称为只写的(write-only);
(3)set访问子在进行属性写入时,用默认关键字value取得写入值;
(4)属性名与其封装的变量名未必有名字关联。如age变量或Age属性,只是看起来方便而已;
//在C#中使用新的方式:属性 using System; class Address { protected string city; public string City { get { return city; } } protected string zipCode; public string ZipCode { get { return zipCode; } set { zipCode = value; city = "Atlanta"; } } } class PropertyApp { public static void Main() { Address addr = new Address(); addr.ZipCode = "30338"; string zip = addr.ZipCode; Console.WriteLine("The city for ZIP code {0} is {1}", addr.ZipCode, addr.City); } }
从下图(msil)中,我们可以清楚地看到,C#中的属性来自.net系统自动地为访问子增加了两个方法,分别是get_属性名或set_属性名:
注意:
(1)对于属性,getter和setter必有其一;
(2)属性不能用作函数的参数;
3.属性用于接口
public interface ISampleInterface { // Property declaration: string Name { get; set; } }
接口属性的访问器不具有体。它只是用来,指示属性是否为--读写、只读或只写。
小结:
从另一个角度(pattern) 来看,属性又是语言(具体是C#)对IoC(控制反转)的一次应用,即访问者不需知道它如何实现,只需要知道那里存在这么一个物件-那个'东西'叫属性!
通过这种手段,我们得到了初始化后置的功效(-a good thing),属性的这种功能特征,叫做“惰性初始化”(lazy initialization)-更适合初始化非常耗费计算资源的问题域。
还是那句话:“在需要的时候再初始化”!--属性不愧为很棒的语言级接口(interface)机制。
发表评论
-
ZT,一篇好文
2010-05-03 10:33 978读读语言大牛们(其中有位是Anders)这篇文章,会很受益。( ... -
关于“匿名方法”与“lambda操作符”的实现
2010-03-24 22:29 840在<关于“回调”的实现>一文中,我们探讨了使用委托 ... -
effective hierarchy(二)之 函数合辑(2)
2009-09-16 21:29 708介绍: 本节我们来看看另外一种封装,构建件。构建件作为 ... -
effective hierarchy(一)之 基本概念(8)
2009-07-02 23:39 657MSDN,C#2 一、语句 1.结束点和可达性(en ... -
effective hierarchy(一)之 基本概念结束篇
2009-06-30 15:41 631一、函数/功能成员(fun ... -
effective hierarchy(一)之 基本概念(7)
2009-06-23 21:15 892以下可跳过: [立记保留:到现在为止,我满意的是认真的精神。 ... -
effective hierarchy(一)之 基本概念(6)
2009-06-21 00:34 920MSDN,C#2.0 转换(conversions) ... -
effective hierarchy(一)之 基本概念(5)
2009-06-18 22:16 690MSDN,C#2.0 变量基本点: 变量代表 ... -
effective hierarchy(一)之 基本概念(4)
2009-06-15 15:59 699MSDN,C#2.0: 一、名字空间和类型名称(nam ... -
effective hierarchy(一)之 基本概念(3)
2009-06-14 15:00 705MSDN,C#2.0: 一、签 ... -
effective hierarchy(一)之 基本概念(2)
2009-06-13 18:22 802MSDN:基本概念 一、 ... -
effective hierarchy(一) 之基本概念(1)
2009-06-11 09:37 750我告诫自己,不要忽略简单的东西,又要扎实。所以这一篇开始,专门 ... -
effective hierarchy(一)之 属性与索引器
2009-06-07 14:07 1123编程笺言:“优良的设计 ... -
effective hierarchy(一)之 从array说起(4)
2009-06-07 00:53 777回顾:上一节中,我们 ... -
effective hierarchy(一)之 从array说起(3)
2009-06-06 21:20 684回顾: 从上一节中,可以看出枚举的易用性对数组使用的启示意义 ... -
effective hierarchy(一)之 从array说起(2)
2009-06-06 09:34 662复习: 从上一节,可 ... -
effective hierarchy(一)之 从array说起(1)
2009-05-29 13:59 868MSDN(c#2.0): 数组的元义是 ... -
effective hierarchy(一)之 C#中的new
2009-05-27 23:21 815MSDN(c#2.0): 在msdn中,指出new的三种用法。 ...
相关推荐
Hierarchy PRO 2021 v2021.1u9
解决这个启动 View Hierarchy时的这个bug: hierarchy viewer unable to debug device
效果及使用方法:https://blog.csdn.net/qq_26318597/article/details/131373576 1.导入插件包 2.选中Hierarchy中的物体 3.右键选择“复制Hierarchy路径” 4.Ctrl + V 粘贴
VS2010 MFC Hierarchy Chart VS2010 MFC Hierarchy Chart
Hierarchy viewer的运行原 的介绍
IRQ hierarchy的初始化及构建过程详解
WPF Class Hierarchy
Evolve Your Hierarchy
里面包含两个插件: 一个Hierarchy PRO 一个QHierarchy 插件 喜欢那个用那个 (测试unity版本 2019.4.5f1 )
Enhanced_Hierarchy_2.0_v2.4.5.unitypackage 最新版本哦 正版
Hierarchy2 v1.3.10.0
*商用请支持正版* 2019/5/14更新更新的Hierarchy PRO - Auto HighLighter v21.3f1
Agilent ADS 2011 Hierarchy
提供轮廓拓扑结信息(hierarchy)且contourIdx的值为-1时函数drawContours()是按怎样的规律绘制轮廓的。 本文档是博文https://blog.csdn.net/wenhao_ir/article/details/125537878的付费内容。 文件付费下载之后请大家...
android工具Hierarchy_Viewer命令详解
hierarchyviewer不能连接android真机问题
Unity Hierarchy面板增强插件 QHierarchy v4.4 仅供学习,请勿商用。
Hierarchy
前端项目-d3-hierarchy,层次数据可视化布局算法。
Architecture for Extracting the Custom Hierarchies from SAP R3 System into BW System