……上文若干千字省略……
------------------------------------------------------
在這裏,有必要把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...