ユーザ用ツール

サイト用ツール


ボックス化

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
ボックス化 [2009/02/03 07:15]
admin
— (現在)
ライン 1: ライン 1:
-{{indexmenu_n>​9}} 
-====== ボックス化 ====== 
  
- 
-C++/​CLIではすべての型はObject型から派生しているとしています。Objectはref classです。しかしint,​charなどの基本型やvalue classなどは、Object型から派生しているとみなさないですむ場合はそうしたほうが高速にプログラムを動かせるのでそうしています。 ​ 
- 
-このような型でも、Objectとみなしたい場合、ボックス化が行われます。ボックス化とは値型データを、マネージヒープ上に箱(メモリ)を確保しそこにコピーする作業です。コピーしたものは本物のObject派生型になります。 ​ 
- 
-基本型をObjectとみなしたい例として、コレクション型を作るとき、コレクションへの追加関数として、Add(Object^ o)と定義する場合などがあります。 
- 
- 
-以下のように書くと、ハンドルは常にマネージヒープを指しているので、2 がボックス化されaがそれを指すようになります。 
-<code cpp> ​ 
-    int^ a = 2; 
-</​code>​ 
- 
- 
-===== サンプルプログラム: ===== 
- 
-<code cpp> 
-void PrintObject(Object^ o) 
-{ 
- System::​Console::​WriteLine(o->​ToString());​ 
-} 
-ref class R 
-{ 
-}; 
-value class V 
-{ 
-}; 
-int main() 
-{ 
- R r1; 
- R^ r2 = gcnew R; 
- V v1; 
- V^ v2 = gcnew V; 
- int a = 2; 
- char c = '​a';​ 
- PrintObject(%r1); ​   // スタックライクをハンドルに代入するには % を使います。 
- PrintObject(r2);​ 
- PrintObject(v1); ​    // ボックス化 
- PrintObject(v2);​ 
- PrintObject(a); ​     // ボックス化 
- PrintObject(c); ​     // ボックス化 
- PrintObject("​AAA"​); ​ // ボックス化 (String^) 
-} 
-</​code>​ 



/var/www/html/virtual/cppcli/data/attic/ボックス化.1233612927.txt.gz · 最終更新: 2013/12/23 09:07 (外部編集)