本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文
建議使用 Visual Studio 2017

__value

 

發佈時間: 2016年4月

System_CAPS_note注意事項

本主題只適用於 Managed Extensions for C++ 第 1 版。 這個語法只可用於維護第 1 版的程式碼。 請參閱 Classes and Structs (C++ Component Extensions) 如需新語法中使用的相同功能。

將類別宣告為 __value 類型。


__value
 class-specifier
__value
 struct-specifier
__nogc
array-specifier
__nogc
pointer-specifier

__value 類型與 __gc 類型的不同之處在於,__value 類型變數直接包含其資料,而 Managed 變數會指向其儲存在 Common Language Runtime 堆積上的資料。

下列條件適用於 __value 類型:

  • __value 關鍵字無法套用至介面。

  • __value 類型可以從任意數目的介面繼承,但是無法從其他類型或 __value 類型繼承。

  • __value 類型是根據定義密封。 如需詳細資訊,請參閱 __sealed

  • 在任何可以使用 Managed 類型的位置都可以使用 __value 類型。

System_CAPS_note注意事項

不允許使用 __value 關鍵字搭配 __abstract 關鍵字。

__value 類型可以明確連接至 System::Object 指標。 這稱為 Boxing。

下列方針適用於在 __nogc 類型內部內嵌實值類型:

  • 實值類型必須有 LayoutSequentialLayoutExplicit

  • 實值類型不能有 gc 指標成員。

  • 實值類型不能有 private 資料成員。

在 Managed Extensions for C++ 中,C# 類別和 C# 結構的對等用法如下:

Managed Extensions for C++

C#

如需詳細資訊

__gc 結構

-或-

__gc 類別

Class - 類別

class 關鍵字

__value 結構

-或-

__value 類別

struct

struct 關鍵字

範例

下列範例會宣告 __value 類型 (V),然後管理兩個 __value 類型的執行個體:

// keyword__value.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>

__value struct V { 
   int m_i;
};

int main() {
   V v1, v2;
   v1.m_i = 5;
   v2 = v1;   // copies all fields of v1 to v2
   v2.m_i = 6;   // does not affect v1.m_I
}
顯示: