有時很容易對Attribute和Property混淆,因為中文翻譯都是“屬性”來解釋的。其實這兩個表達的不是一個層面的東西。
Property屬於面向對象理論范疇,在使用面向對象思想編程的時候,常常需要對客觀事物進行抽象,再把抽象出來的結果封裝成類,類中用來表示事物狀態的成員就是Property譯為“屬性”。比如要寫一個模擬賽車的游戲。現實的汽車會有很多的數據:長度,寬度,高度,重量,速度等有幾個數據。同時,還會把汽車“加速”,“減速”等一些行為也提取出來並用算法模擬,這個過程就是抽象(結果是Car這個類)。顯然,Car.Length,Car.Height,Car.Speed等表達的是汽車當前處的狀態,而Car.Accelerate(),Car.Break()表達的是汽車能做什么。因此,總結一句話:Property(屬性)是針對對象而言的。
Attribute則是編程語言文法層面的東西。比如有兩個同類的語法元素A和B,為了表示A與B不完全相同或者A與B在用法上有些區別,這時候要針對A和B加一些Attribute。也就是說,Attribute只與語言層面上的東西相關,與抽象出來的對象沒什么關系。因為Attribute表示“區分”的,所以把它譯為“特征”。
因為XAML是用來在UI控制上繪制控件,而控件本身就是面向對象抽象的產物,所以XAML標簽的Attribute里面就有一大部分與控件對象的Property互相對應的。當然,這還意味着XAML標簽還有一些Attribute多於它所代表對象的Property。
讀書筆記《深入淺出WPF》(作者劉鐵錳)