property
(C++/CLI 和C++/CX)
可宣告「屬性」,它是一個成員函式,其行為模式和存取方式類似於資料成員或陣列元素。
所有運行時間
您可以宣告下列其中一個類型的屬性。
「簡單屬性」
根據預設,建立set
指派屬性值的存取子、get
擷取屬性值的存取子,以及包含屬性值的編譯程式產生的私用數據成員。「屬性區塊」
使用屬性區塊來建立使用者定義get
或set
存取子。 如果get
已定義 和set
存取子,則屬性是可讀取和寫入的,如果只get
定義存取子,則為唯讀,如果只定義存取子,set
則為唯寫。您必須明確宣告資料成員以包含 屬性值。
「索引屬性」
您可以用來取得和設定由一個或多個索引所指定之屬性值的屬性區塊。您可以建立具有使用者定義的屬性名稱或「預設」屬性名稱的索引屬性。 預設索引屬性的名稱是定義屬性所在的類別的名稱。 若要宣告預設屬性,請指定
default
關鍵詞,而不是屬性名稱。
明確宣告數據成員以包含 屬性值。 針對索引的屬性,資料成員通常是陣列或集合。
語法
property type property_name;
property type property_name {
access-modifier type get() inheritance-modifier {property_body};
access-modifier void set(type value) inheritance-modifier {property_body};
}
property type property_name[index_list] {
access-modifier type get(index_list) inheritance-modifier {property_body};
access-modifier void set(index_list, value) inheritance-modifier {property_body};
}
property type default[index_list] {
access-modifier type get(index_list) inheritance-modifier {property_body};
access-modifier void set(index_list, value) inheritance-modifier {property_body};
}
參數
type
屬性值和屬性本身的數據類型。
property_name
屬性的名稱。
access-modifier
存取限定詞。 有效的限定元為 static
與 virtual
。
get
或 set
存取子不需要同意virtual
限定符,但必須同意static
限定符。
inheritance-modifier
繼承限定詞。 有效的限定元為 abstract
與 sealed
。
index_list
一或多個索引的逗號分隔清單。 每個索引的組成為索引類型以及可在屬性方法主體中使用的選擇性識別碼。
value
要指派給作業中 set
屬性的值,或在作業中擷 get
取。
property_body
或 get
存取子的屬性set
方法主體。 property_body
可以使用 index_list
來存取基礎屬性數據成員,或做為使用者定義處理中的參數。
Windows 執行階段
如需詳細資訊,請參閱屬性 (C++/CX)。
需求
編譯器選項:/ZW
通用語言執行平台
語法
modifier property type property_name;
modifier property type property_name {
modifier void set(type);
modifier type get();
}
modifier property type property_name[index-list, value] {
modifier void set(index-list, value);
modifier type get(index-list);
modifier property type default[index];
}
參數
modifier
可以在屬性宣告或 get/set 存取子方法上使用修飾詞。 可能的值是 static
和 virtual
。
type
屬性表示之值的類型。
property_name
方法的參數 raise
(s)必須符合委派的簽章。
index_list
以逗號分隔的一個或多個索引清單,以方括弧指定(下標運算符, []
)。 針對每個索引,指定類型以及可以用在屬性方法主體中的選擇性識別碼。
備註
第一個語法範例會示範「簡單屬性」,其中隱含宣告 set
和 get
這兩個方法。 編譯器會自動建立私用欄位來儲存屬性的值。
第二個語法範例會示範「屬性區塊」,其中明確宣告 set
和 get
這兩個方法。
第三個語法範例會示範客戶定義的「索引屬性」。 索引屬性除了要設定或擷取的值以外,還會接受參數。 指定屬性的名稱。 不同於簡單屬性, set
索引屬性的 和 get
方法必須明確定義,因此您必須指定屬性的名稱。
第四個語法範例會示範「預設」屬性,它可讓您以類似陣列的方式存取型別的執行個體。 關鍵詞 default
只會指定預設屬性。 預設屬性的名稱是定義屬性所在的類型的名稱。
property
關鍵詞可以出現在類別、介面或實值型別中。 屬性可以有函 get
式(只讀)、函 set
式(唯寫),或兩者(讀寫)。
屬性名稱不符合包含該屬性的Managed類別名稱。 getter 函式的傳回類型必須符合對應 setter 函式之最後一個參數的類型。
對用戶端程式碼來說,屬性具有一般資料成員的外觀,並且可使用與資料成員相同的語法往返寫入或讀取。
get
和 set
方法不需要就修飾詞達成virtual
一致。
和 set
方法的get
存取範圍可能會不同。
屬性方法的定義可能出現在類別主體外,如同一般的方法。
屬性 get
的 和 set
方法應同意 static
修飾詞。
如果屬性和 get
set
方法符合下列描述,則屬性為純量:
方法
get
沒有參數,而且具有傳回型別T
。方法
set
具有 類型的T
參數,且傳回型別void
為 。
具有相同識別項的範圍內應該只宣告一個純量屬性。 純量屬性不可多載。
宣告屬性資料成員時,編譯器會在類別中插入資料成員 — 有時稱為「備份存放區」。 不過,數據成員的名稱是窗體,因此您無法參考來源中的成員,就好像它是包含類別的實際數據成員一樣。 使用 ildasm.exe 來檢視您類型的中繼資料,並查看屬性的備份存放區編譯器產生的名稱。
屬性區塊中的存取子方法允許不同的可及性。 也就是說, set
方法可以是 public
,而且 get
方法可以是 private
。 不過,存取子方法的存取範圍比屬性本身宣告的存取範圍還低,是錯誤的。
property
是即時線上關鍵字。 如需詳細資訊,請參閱 上下文相關關鍵詞。
需求
編譯器選項:/clr
範例
下列範例顯示屬性資料成員和屬性區塊的宣告和使用。 它也會顯示可以從類別定義的屬性存取子。
// mcppv2_property.cpp
// compile with: /clr
using namespace System;
public ref class C {
int MyInt;
public:
// property data member
property String ^ Simple_Property;
// property block
property int Property_Block {
int get();
void set(int value) {
MyInt = value;
}
}
};
int C::Property_Block::get() {
return MyInt;
}
int main() {
C ^ MyC = gcnew C();
MyC->Simple_Property = "test";
Console::WriteLine(MyC->Simple_Property);
MyC->Property_Block = 21;
Console::WriteLine(MyC->Property_Block);
}
test
21