c
#中的域(field
)和屬性(property
)
(
一般的命名習慣
field:
_***
對應的屬性
:***)
或許狹義地進行區分一下,
get和
set的實現的稱為屬性,其他的變數稱為資料成員。
c#將屬性從其他語言中的一種特殊約定提公升成為一種第一等(
first-class
)的語言特性。屬性在使我們可以將資料成員暴露為公有介面的同時,還為我們提供了在物件導向環境中所期望的封裝。在
c#中,屬性(
property
)是這樣一種語言元素:它們在被訪問的時候看起來好像是資料成員,但是它們卻是用方法實現的。
.net
框架類庫(
framework class library
)的設計者們認為將資料成員直接暴露給外界不符合物件導向的設計原則,因為屬性不表示儲存位置,這是屬性和域的根本性的區別。
.net
框架類庫這樣的設計策略從某種意義上講也是在推動我們遵循物件導向的設計原則。
例如,我們可能很快就會發現
customer
類不能有乙個空的
name
。如果我們使用乙個公用屬性來實現
name
,那麼只需要在乙個地方做更改即可:
public class customer
set_name = value;}}
// ……
}如果使用的是公有資料成員,我們就要尋找並修改所有設定
customer
的name
的**,那將花費大量的時間。
這裡的value是c#
的關鍵字,是我們進行屬性操作時的
set的隱含引數,也就是我們在執行屬性寫操作時的右值。
在as3
中,訪問控制符
function get
方法名():
返回型別
訪問控制符
function set
方法名(引數:
引數型別
):void
c
#中的域(field
)和屬性(property
)
訪問乙個類的成員變數可以有兩種方式:域、屬性。域作為
public
型別的成員變數訪問,而屬性不能直接進行訪問,必須通過訪問器(
assessors
)進行。
域(field
)
l域表示與物件或類相關聯的變數。 l
域的宣告中如果加上了
readonly
修飾符,表明該域為唯讀域。對於唯讀域我們只能在域的定義中和它所屬類的建構函式中進行修改。在其他情況下,域是「唯讀
」的。 l
static readonly
的作用和
#define
、const
的作用類似。區別是:
const
型表示式的值是在編譯時形成的,而
static readonly
表示式的值直到程式執行時才形成。如:
public class a
lc/c++中未經初始化的變數是不能使用的。在
c#中,系統將為每個未經初始化的變數提供乙個預設值。對於所有引用型別的變數,預設值是
null
。所有值型別的變數的預設值是固定的。對於靜態域,類在裝載時對其進行初始化;對於非靜態域,在類的例項建立時進行初始化。在預設的初始化之前,域的值是不可**的。
例如下面的**是合法的:
class test
實際上等價於:
a = 1; b = 2;
而下面的**則是非法的:
class a
因為非靜態變數x在類
a例項化以前並沒有初始化,**
y = x + 1
無法得到正確的
x的值。
屬性(property
)
l充分體現了物件的封裝性:不直接操作類的資料內容,而是通過訪問器進行訪問,即借助於
get和
set對屬性的值進行讀寫;另一方面還可以對資料的訪問屬性進行控制(當然也可以通過對普通域加
readonly
關鍵字來實現。 l
設計原則:屬性封裝了對域的操作。把要訪問的域設為private
,通過屬性中的get
和set
操作對域進行設定或訪問。
l不能把屬性作為引用型別或輸出引數來進行傳遞。 l
get方法沒有引數;
set方法有乙個隱含的引數
value
。除了使用了
abstract
修飾符的抽象屬性,每個訪問器的執行體中只有分號「;
」外,其他的所有屬性的
get訪問器都通過
return
來讀取屬性的值,
set訪問器都通過
value
來設定屬性的值。 l
採用間接方式來訪問物件的屬性(間接呼叫
get、
set方法):物件.屬性
=值(呼叫
set),變數=物件
.屬性(呼叫
get)。
<
john:而屬性是對某個域的讀寫> l
在屬性的訪問宣告中: 只有
set訪問器,表明該屬性是只寫的。 只有
get訪問器,表明該屬性是唯讀的。 既有
set訪問器,又有
get訪問器,表明該屬性是可讀可寫的。
舉例:通過屬性訪問器訪問類的屬性。
using system;
public class file
//get
set
//if
}//set
}//filename }
C 中的域與屬性
c 中類成員變數的定義分為兩種 域 field 與屬性 property 屬性為公有變數,以get,set訪問器進行訪問,域多為私有變數,非get set訪問器進行訪問,如以下類的的域為成員name,而屬性為val.class customer endregion 當我們獲得乙個類物件時,我們就可以...
C 中的變數 字段 域 屬性 屬性過程
在c 中 域 表示與物件或類相關聯的變數,修飾符不論是不是public。與字段類似 字段 表示與物件或類相關聯的變數。通常來講修飾符是public的成員變數稱為字段,而private更適合說是區域性變數。與域類似 屬性 表示域或字段的自然擴充套件,使得在保證封裝性的基礎上實現了訪問私有成員的便捷性。...
C中的鏈結屬性及作用域
如果相同的識別符號出現在幾個不同的原始檔中時,它們是表示相同的實體,還是不同的實體。識別符號的鏈結屬性決定如何處理在不同檔案中出現的識別符號。識別符號的作用域與它的鏈結屬性有關。鏈結屬性一般有三種 external 外部,internal 內部,none 無。沒有鏈結屬性的識別符號總是被當作單獨的個...