深刻浅出WPF——澄清Attribute与Property

 ……上文若干千字省略……
 
------------------------------------------------------
在这里,有必要把Attribute和Property这两个词仔细地辨别一下。
这两个词的混淆由来已久。混淆的主要缘由就是大多数中文译本里既把Attribute译为“属性”,也把Property译为“属性”。其实,这两个词所表达的不是一个层面上的东西。
Property 属于面向对象理论范畴。在使用面向对象思想编程的时候,咱们经常须要对客观事物进行抽象,再把抽象出来的结果封装成类,类中用来表示事物状态的成员就是 Property。好比我要写一个模拟×××的游戏,那么必不可少的就是对现实汽车的抽象。现实中的汽车身上会带有不少数据,但在游戏中我可能只关心它的长 度、宽度、高度、重量、速度等有限的几个数据,同时,我还会把汽车“加速”、“减速”等一些行为也提取出来并用算法模拟——这个过程就是抽象(结果是 Car这个类)。显然,Car.Length、Car.Height、Car.Speed等表达的是汽车当前处在一个什么状态,而 Car.Accelerate()、Car.Break()表达的是汽车能作什么。所以,Car.Length、Car.Height、 Car.Speed就是Property的典型表明,将Property译为“属性”也很贴切。总结一句话就是:Property(属性)是针对对象而言 的。
 Attribute则是编程语言文法层面的东西。好比我有两个同类的语法元素A和B,为了表示A与B不彻底相同或者A与B在用法上有些区 别,这时候我就要针对A和B加一些Attribute了。也就是说,Attribute只于语言层面上的东西相关——与抽象出来的对象没什么关系。由于 Attribute是为了表示“区分”的,因此我喜欢把它译为“特征”。C#中的Attribute就是这种应用的典型例子——咱们能够为一个类添加 Attribute,这个类的类成员中有不少Property——显然Attribute只是用来影响类在程序中的用法而Property则对应着抽象对 象身上的性状,它们根本不是一个层面上的东西。
 习惯上,英文中把标签式语言中表示一个标签特征的“名称-值”对称为Attribute。若是恰 好咱们又是用一种标签语言在进行面向对象编程,这时候两个概念就有可能混淆在一块儿了。实际上,使用可以进行面向对象编程的标签式语言只是把标签与对象作了 一个映射,同时把标签的Attribute与对象的Property也作了一个映射——针对标签,咱们仍是叫Attribute,针对对象,咱们仍是叫 Property,仍然不是一个层面上的东西。并且,标签的Attribute与对象的Property也不是彻底映射的,每每是一个标签所具备的 Attribute多于它所表明的对象的Property。
 由于XAML是用来在UI上绘制控件的,而控件自己就是面向对象抽象的产物,因此XAML标签的Attribute里有就一大部分是与控件对象的Property互相对应的。固然,这还意味着XAML标签还有一些属性并不对应控件对象的Property。
---------------------------------------------------
TO BE CONTINUED...
相关文章
相关标签/搜索