首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++/CLI 入門:組件、中繼資料、CLI 型別與屬性系統

     編輯:關於C++

C++/CLI 是標準 C++ 針對 CLI 平台的擴展方言。本文從編譯模型、型別系統、屬性語法、泛型輸出、建置流程五大面向帶你入門。

組件與中繼資料

  • 單次編譯產出一個組件(.exe 或 .dll),無傳統 .obj + 鏈結模式。
  • 組件內含 CIL(MSIL)指令與中繼資料,描述所有型別/成員簽章。
  • 參考外部組件直接讀取中繼資料,無需標頭檔。
  • VES(虛擬執行系統)載入並執行 CIL。

CLI 型別分類

所有 CLI 型別隱含繼承 System::Object(值型別繼承 System::ValueType)。

Point 類別完整範例

using namespace System;

public ref class Point {
    int x, y;
public:
    property int X {
        int get() { return x; }
        void set(int v) { x = v; }
    }
    property int Y {
        int get() { return y; }
        void set(int v) { y = v; }
    }
    Point() : X(0), Y(0) {}
    Point(int xor, int yor) : X(xor), Y(yor) {}
    void Move(int xor, int yor) { X = xor; Y = yor; }

    virtual bool Equals(Object^ obj) override {
        if (obj == nullptr) return false;
        if (this == obj) return true;
        if (GetType() == obj->GetType()) {
            Point^ p = static_cast<Point^>(obj);
            return X == p->X && Y == p->Y;
        }
        return false;
    }
    virtual int GetHashCode() override { return X ^ (Y << 1); }
    virtual String^ ToString() override { return String::Concat("(", X, ",", Y, ")"); }
};

關鍵語法重點

  • property 關鍵字定義屬性,get/set 存取器可有不同存取性。
  • gcnew 配置 GC 堆物件,回傳控制代碼 ^(句柄)。
  • nullptr 統一空值常數(句柄/指標通用)。
  • 虛擬函式需 virtual ... override,不可 const。
  • 格式化輸出用 Console::WriteLine("{0}", obj),自動呼叫 ToString()。
  • 裝箱隱含發生:int → Object^ 配置堆上物件複製值。

簡單測試程式

int main() {
    Point^ p1 = gcnew Point;
    Console::WriteLine("p1 = {0}, Hash = {1}", p1, p1->GetHashCode());
    p1->Move(5,7);
    Console::WriteLine("p1 = {0}, Hash = {1}", p1, p1->GetHashCode());
    Console::WriteLine("Equals(9,1) = {0}", p1->Equals(gcnew Point(9,1)));
}

輸出:
p1 = (0,0), Hash = 0
p1 = (5,7), Hash = 11
Equals(9,1) = False

垃圾回收

  • 句柄離開作用域或設為 nullptr 減少參考計數。
  • 計數歸零時記憶體合格回收,時機非確定性。
  • delete handle 呼叫 Dispose()(若實作 IDisposable),但記憶體仍待 GC 回收。

Visual Studio 2005 專案建置步驟

  1. 建立「空專案」Point,輸出類型設「動態庫 (.dll)」,/clr、/MD。
  2. 加入 Point.cpp,建置產出 Point.dll。
  3. 建立第二個專案 Main(.exe),同樣 /clr//MD。
  4. 專案參考加入 Point.dll,建置執行。
提示:可同時開啟兩個 VS 實例分別編輯兩專案,提升效率。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
分類關鍵字備註
參考型別ref class/structGC 堆配置,語意參考
值型別value class/struct堆疊/內嵌配置,語意值
介面interface class/struct純抽象契約
列舉enum class/struct強型別,CLS 相容
委派delegate型別安全函式指標
原生型別class/struct傳統 C++,非 CLI 型別