深入淺出WPF——澄清Attribute與Property

來源:互聯網
上載者:User

 ……上文若干千字省略……

 

------------------------------------------------------

在這裡,有必要把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 CONTINUE...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.