深入淺出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...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章