程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 實例解析C++/CLI的“克隆”

實例解析C++/CLI的“克隆”

編輯:vc教程

C++/CLI不但支持基於堆棧的對象,同時也支持基於堆的對象;然而,如果想與其他基於CLI的(如C#、J#、Visual Basic)進行互操作的話,必須要清楚地知道,這些語言只支持基於堆的對象;當處於基於堆的對象環境中時,你與對象之間,永遠只有"一臂之遙",比方說,兩個給定的句柄h1與h2,只有在為這種句柄類型定義了相應的賦值操作符時,*h1 = *h2才會工作正常,而對C++/CLI之外的其他語言中的類型來說,情況可能就不是這樣了。同樣地,一個遵從CLS的機制需要創建對象的一份副本,這種機制被稱為"克隆"。

使用CLI庫中的Clone函數

請看例1中的代碼,其使用了類似於矢量的一個System::ArrayList類,插1是程序的輸出。

例1:

using namespace System;
using namespace System::Collections;
void PrintEntries(String^ s, ArrayList^ aList);
int main()
{
  ArrayList^ al1 = gcnew ArrayList;
  /*1*/ al1->Add("Red");
  al1->Add("Blue");
  al1->Add("Green");
  al1->Add("Yellow");
  /*2*/ PrintEntries("al1", al1);
  /*3*/ ArrayList^ al2 = static_cast<ArrayList^>(al1->Clone());
  /*4*/ PrintEntries("al2", al2);
  /*5*/ al1->Remove("Blue");
  al1->Add("Black");
  al1->RemoveAt(0);
  al1->Insert(0, "Brown");
  /*6*/ PrintEntries("al1", al1);
  /*7*/ PrintEntries("al2", al2);
}
void PrintEntries(String^ s, ArrayList^ aList)
{
  Console::Write("{0}: ", s);
  for each(Object^ o in aList)
  {
   Console::Write("\t{0}", o);
  }
  Console::WriteLine();
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved