property和attribute的区别

property是指类向外提供的数据区域。
而attribute则是描述对象在编译时或运行时属性的,分为固有型和用户自定义型,其中用户自定义型能够利用Reflection在运行期获取。
这二者是有本质区别的。编程

资料上说两者一个是service的属性,而另外一个是interface的。数组

第一种好象更准确,摘要以下:安全

在不少人的脑海中,Attribute就是类的属性,Property呢?好像也是类的属性?所以有不少人不加区别的统一称为类的属性,尤为是在写中文文章的时候。这种心理是典型的鸵鸟心态,眼不见为净。其实稍微用脚想一下就知道,事实确定不是这样的,UML中既然发明了这两个术语,显然不是用来冗余的。它们之间确定有着千丝万缕的联系与区别。多线程

各类各样的面向对象语言、各类组件技术、模板技术、Web Service技术,其中大部分涉及到了“属性”这个概念,而其英文术语则经常是Attribute、Property或者Field。不少人一律称之为“属性”,有的地方确实能够不加区分,但有的地方倒是差之毫厘、谬以千里。我对于这些纷纷扰扰的技术和术语也很苦恼,可是咱们至少能够经过UML中的这两个术语的解释找到一个能够参考的标准。不管如何,UML是面向对象技术的集大成者和事实上的标准。编程语言

很客观的说,UML1.4中对于这两个术语并无很清晰的定义,可是其区别仍是显而易见的。Attribute应该是UML1.4中的宠儿,而Property连一个单独的术语都没有捞到。谁也没想到在UML2.0中风云突变,Attribute从类图中消失了,而Property冠冕堂皇入主中原。布局

1。4中 Attribute是与Classifier相关联的术语,它比Property的影响范围要小。Class是Classifier的子类,所以Attribute也能够表示Class的属性。从上面的定义还能够看出,Attribute能够是Classifier的实例的命名的槽。对于Class来讲,其实例就是Object,Object的槽就是对象的属性值槽。所以,Attribute是能够做为对象的属性的。而Property彷佛没有这一层的含义。按MOF(元对象设施,OMG的另外一个规范,后面会有详细解释)的模型层次划分,Attribute涉及的模型层从M2到M0,而Property彷佛只是M2层的概念。spa

2。0中 Attribute这里仅仅指一个类元的结构特征,能够将类元的实例联系到一个或者一组具体值。而没有提到实例的槽(slot)等等。我猜测,这是由于UML2.0中已经把Attribute做为Property的一个子集了,因此关于实例的槽(slot)等等的具体赋值方法,都归结到Property的定义中解释了。线程

另一点值得注意的是,Attribute的定义来自于术语表,而没有在元模型图中出现。而Property出如今元模型图中,而且都作了详细而具体的解释。这一点能够看出,UML强化Property,弱化Attribute的决心。翻译

AttributeProperty的总结

这一节对Attribute和Property做一个小结,基于目前最新的UML2.0规范:code

1) 整体上来讲,Attribute是Property的子集,Property会在适当的时机表现为Attribute;

2) Property出如今类图的元模型中,表明了Class的全部结构化特征;Attribute没有出如今元模型中,它仅仅在Class的概念中存在,没有相应的语法了;

3) Property有详细的定义和约束,而Attribute没有详细的定义,所以也不能用OCL写出其约束。

4)Property和Attribute都是M2层的概念。在M1层,它们的实例是具体类的属性;在M0层,它们的实例的实例是具体对象的槽中存储的值。

 

对于property和attribute这两个名词都叫“属性”的问题,来源于国内it书籍翻译界的疏忽。

其实它们来源于两个不一样的领域,attribute属于OOA/OOD的概念,而property属于编程语言中的概念。下面咱们来讲明它们的异同。
Attribute
Attributes是Microsoft .NET Framework文件的元数据,能够用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。
Property
属性是面向对象编程的基本概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读可写属性的操做,提供了安全和灵活的数据访问封装。关于属性的概念,不是本文的重点,并且相信大部分的技术人员应该对属性有清晰的概念。如下是简单的属性
区别
能够说二者没有可比性,只不过咱们国家的语言特色才引发的歧异,其实只要记住Attribute是派生于System,Attribute类之下,它的主要做用是描述,好比某为了 描述某个方法是来自与外部的dll,
能够写以下代码,这就是一个Attribute,他是一个描述(或者说声明)
[DllImport("User32.dll")]
 
Attribute也有不少系统的“默认”属性,见下表
预约义的属性
有效目标
说明
AttributeUsage
Class
指定另外一个属性类的有效使用方式
CLSCompliant
所有
指出程序元素是否与CLS兼容
Conditional
Method
指出若是没有定义相关联的字符串,编译器就能够忽略对这个方法的任何调用
DllImport
Method
指定包含外部方法的实现的DLL位置
STAThread
Method(Main)
指出程序的默认线程模型为STA
MTAThread
Method(Main)
指出程序的默认模型为多线程(MTA)
Obsolete
除了Assembly、Module、Parameter和Return
将一个元素标示为不可用,通知用户此元素将被从将来的产品
ParamArray
Parameter
容许单个参数被隐式地看成params(数组)参数对待
Serializable
Class、Struct、enum、delegate
指定这种类型的全部公共和私有字段能够被串行化
NonSerialized
Field
应用于被标示为可串行化的类的字段,指出这些字段将不可被串行化
StructLayout
Class、struct
指定类或结构的数据布局的性质,好比Auto、Explicit或sequential
ThreadStatic
Field(静态)
实现线程局部存储(TLS)。不能跨多个线程共享给定的静态字段,每一个线程拥有这个静态字段的副本
 
 
而Property是指编程过程当中的字段,也即类的成员。
如:
private int hour; //定义私有变量表示"小时",外部是访问不到的.} 
public int Hour// 定义Hour程序接口
{ 
     set { hour=value; } 
     get { return hour;}
相关文章
相关标签/搜索