Property和attribute的區別

2021-09-22 13:47:00 字數 2051 閱讀 9619

attribute和property都可以翻譯成「屬性」,有的地方用attribute表示「屬性」,有的地方又在用property,初 學者常常在這兩個單詞間「迷失」,甚至認為二者沒有區別,是一樣的。可是attribute不等於property。二者之間到底有何區別?

我們從ooa/ood(object oriented analysis / object oriented design,物件導向分析與設計)說起。在ooa/ood中的使用attribute表示屬性,指物件(object)的特徵(feature)。我們 在一些程式語言(如c#、delhpi等)中遇到的「屬性」一詞,為何是property,而不是attribute呢?

為了理解這一點,我們把c++拽進來看看。ooa/ood中的attribute在c++中稱為member variable(成員變數),慢慢開始明白了吧。c++中的member variable在c#中可以繼續延用,但有了乙個新的稱呼:field(字段)。看乙個簡單的c#示例:

public class student

我們整理出下表,可以看到同樣的概念在ooa/ood、c++和c#中的不同稱呼:

description

ooa/ood

c++

.net(c#) /delphi

feature

attribute

member variable

field

ooa/ood中的方法(method)是指物件的操作(operation)。在c++中稱為member function(成員函式),而在c#中還是叫做method。在表中加入對方法(method)的稱呼:

description

ooa/ood

c++

.net(c#) /delphi

feature

attribute

member variable

field

operation

method

member function

method

也可以看出,c++中將attribute稱為member variable,將method稱為member function,其實還是很貼切的。從本質上說,確實是在宣告變數、定義函式。後來者(c#等)可能覺得這樣的稱呼不夠oo(object oriented,物件導向),於是做了些改變。method延用ooa/ood的稱呼不用說,但將attribute稱作field,總覺得欠妥。因為 db(database,資料庫)中有field的概念,也譯作「字段」,實在是容易混淆。

現在我們可以把ooa/ood中提到的屬性(attribute)同c#中提到的屬性(property)區分開來。繼續上面的示例:

public class student

set }

}我們順便看看private和public:property本質上是一對get/set方法,可以進行訪問控制,因而可以設定為public;而按照ooa/ood原則,attribute不能設為public,而要設為private。

c#中確實也有attribute,把它譯作「特性」似乎更好些。如:

[webmethod]

在不少的.net/c#書籍中看到有把attribute譯成「屬性」的,這樣一來,老鳥倒是可以通過語境判斷出來不是在說property,初學者恐怕一下子就跌進雲裡霧裡了。雖然不至於「乙個饅頭引發的血案」,但「兩個屬性引發的歧異」,終究不是什麼好事情。

另外,在web程式設計中也常見到attribute和property混用的情況。比如用vs 2003或2005建立乙個asp.net應用程式,如果在**檢視新增控制項:

此時textbox控制項中的id、text和runat都稱為attribute,這是延用了html中對屬性(attribute)的稱呼。

如果是在設計檢視中拖放控制項,然後在屬性(properties)視窗中設定id或text,此時又會將id或text稱為property。 因為控制項在伺服器上是作為控制項類(control class)實現,使得可以用程式設計的方式來訪問控制項。那麼屬性必然是class中的property。

在我們平日裡使用術語的時候,一定要準確,否則在交流時遇到不必要的障礙。

attrib命令的使用

attrib命令的使用 命令列 attrib s h c windows run.sys 解 釋 attrib 命令名稱 s 取消檔案的系統屬性 h 取消檔案的隱藏屬性 c windows run.sys 操作的檔名 注意每項之前均用空格間隔。對於attrib命令的使用詳解如下所示 attrib命令...

property和 property的一些小結

在.h檔案中 inte cemyclass nsobject property nonamtic,retain myobjecct myobject end 在.m檔案中 implementation myclass synthesize myobject myobject void dealloc...

property和attribute的區別

property是指類向外提供的資料區域。而attribute則是描述物件在編譯時或執行時屬性的,分為固有型和使用者自定義型,其中使用者自定義型可以利用reflection在執行期獲取。這兩者是有本質區別的。資料上說二者乙個是service的屬性,而另乙個是inte ce的。第一種好象更準確,摘要如...