分享方式:


ref 類別和 ref 結構 (C++/CLI 和 C++/CX)

ref 類別ref 結構 延伸模組會宣告「物件存留期」會自動管理的類別或結構。 當物件無法再存取或超出範圍時,就會釋放記憶體。

所有執行階段

語法

class_access ref class name modifier : inherit_access base_type {};
class_access ref struct name modifier : inherit_access base_type {};
class_access value class name modifier : inherit_access base_type {};
class_access value struct name modifier : inherit_access base_type {};

參數

class_access
(選擇性) 組件外部的類別或結構的存取範圍。 可能的值為 publicprivateprivate 是預設值)。 巢狀類別或結構不可以有class_access 指定名稱。

name
類別或結構的名稱。

modifier
(選擇性) abstractsealed 為有效的修飾詞。

inherit_access
(選擇性) base_interface 的存取範圍。 唯一允許的存取範圍是 publicpublic 是預設值)。

base_type
(選擇性) 基底類型。 不過,值類型無法做為基底類型。

如需詳細資訊,請參閱 Windows 執行階段和 Common Language Runtime 區段中,此參數的語言特定描述。

備註

ref 類別或實值類別宣告之物件的預設成員存取範圍為 private以 ref 結構值結構宣告之物件的預設成員存取範圍為 public

當參考類型繼承自另一個參考類型時,必須以 override 明確覆寫,或以 new (vtable 中的新位置) 隱藏基底類別中的虛擬函式。 衍生類別函式也必須明確標示為 virtual

若要在編譯時間偵測某個類型為 ref 類別ref 結構,或是實值類別實值結構,請使用 __is_ref_class (type)__is_value_class (type)__is_simple_value_class (type)。 如需詳細資訊,請參閱類型特徵的編譯器支援

如需類別和結構的詳細資訊,請參閱

Windows 執行階段

備註

請參閱 Ref 類別與結構實值類別與結構

參數

base_type
(選擇性) 基底類型。 ref 類別ref 結構可以繼承自零或多個介面,以及零或一種 ref 類型。 實值類別實值結構只可以繼承自零或多個介面。

當您使用 ref 類別ref 結構關鍵字宣告物件時,控制代碼可針對物件存取物件;也就是物件的參考計數器指標。 當宣告的變數超出範圍時,編譯器會自動刪除基礎物件。 當物件做為呼叫中的參數使用,或是儲存在變數中時,實際上是傳遞或儲存該物件的控制代碼。

當您使用實值類別實值結構關鍵字宣告物件時,不會監督所宣告物件的物件存留期。 此物件類似任何其他標準 C++ 類別或結構。

需求

編譯器選項:/ZW

通用語言執行平台

備註

下表列出 C++/CLI 特有的所有執行階段區段中所顯示語法的差異。

參數

base_type
(選擇性) 基底類型。 ref 類別ref 結構可以繼承自零或多個受控介面,以及零或一種 ref 類型。 實值類別實值結構只可以繼承自零或多個受控介面。

ref 類別ref 結構關鍵字會告訴編譯器:類別或結構是在堆積上配置。 當物件做為呼叫中的參數使用,或是儲存在變數中時,實際上是傳遞或儲存該物件的參考。

實值類別實值結構關鍵字會告訴編譯器,所配置類別或結構的值已傳遞給函式或儲存在成員中。

需求

編譯器選項:/clr

另請參閱

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