property (C++/CLI 和 C++/CX)

可宣告「屬性」,它是一個成員函式,其行為模式和存取方式類似於資料成員或陣列元素。

所有執行時間

您可以宣告下列其中一個類型的屬性。

  • 「簡單屬性」
    根據預設,建立 set 指派屬性值的存取子、 get 擷取屬性值的存取子,以及包含屬性值的編譯器產生的私用資料成員。

  • 「屬性區塊」
    使用屬性區塊來建立使用者定義 getset 存取子。 如果 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
存取限定詞。 有效的限定詞為 staticvirtual

getset 存取子不需要同意 virtual 限定詞,但必須同意 static 限定詞。

inheritance-modifier
繼承限定詞。 有效的限定詞為 abstractsealed

index_list
一或多個索引的逗號分隔清單。 每個索引的組成為索引類型以及可在屬性方法主體中使用的選擇性識別碼。

value
要指派給作業中 set 屬性的值,或在作業中擷 get 取。

property_body
get 存取子的屬性 set 方法主體。 property_body可以使用 index_list 來存取基礎屬性資料成員,或做為使用者定義處理中的參數。

Windows 執行階段

如需詳細資訊,請參閱屬性 (C++/CX)

需求

編譯器選項:/ZW

Common Language Runtime

語法

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 存取子方法上使用修飾詞。 可能的值是 staticvirtual

type
屬性表示之值的類型。

property_name
方法的參數 raise (s)必須符合委派的簽章。

index_list
以逗號分隔的一個或多個索引清單,以方括弧指定(下標運算子, [] )。 針對每個索引,指定類型以及可以用在屬性方法主體中的選擇性識別碼。

備註

第一個語法範例會示範「簡單屬性」,其中隱含宣告 setget 這兩個方法。 編譯器會自動建立私用欄位來儲存屬性的值。

第二個語法範例會示範「屬性區塊」,其中明確宣告 setget 這兩個方法。

第三個語法範例會示範客戶定義的「索引屬性」。 索引屬性除了要設定或擷取的值以外,還會接受參數。 指定屬性的名稱。 不同于簡單屬性, set 索引屬性的 和 get 方法必須明確定義,因此您必須指定屬性的名稱。

第四個語法範例會示範「預設」屬性,它可讓您以類似陣列的方式存取型別的執行個體。 關鍵字 default 只會指定預設屬性。 預設屬性的名稱是定義屬性所在的類型的名稱。

property關鍵字可以出現在類別、介面或實值型別中。 屬性可以有函 get 式(唯讀)、函 set 式(唯寫),或兩者(讀寫)。

屬性名稱不符合包含該屬性的 Managed 類別名稱。 getter 函式的傳回類型必須符合對應 setter 函式之最後一個參數的類型。

對用戶端程式碼來說,屬性具有一般資料成員的外觀,並且可使用與資料成員相同的語法往返寫入或讀取。

getset 方法不需要就 修飾詞達成 virtual 一致。

set 方法的 get 存取範圍可能會不同。

屬性方法的定義可能出現在類別主體外,如同一般的方法。

屬性 get 的 和 set 方法應同意 static 修飾詞。

如果 屬性和 getset 方法符合下列描述,則屬性為純量:

  • 方法 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

另請參閱

適用於.NET 和 UWP 的元件延伸模組