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

C++/CLI 核心觀念:組件、中繼資料、CLI 型別與 ref class 實作

     編輯:VC 教學

組件與中繼資料

  • 組件:單次編譯輸出單元。含進入點為 .exe,否則 .dll。取代傳統 obj+link 模式。
  • 中繼資料:描述組件內型別、方法、屬性、泛型參數等完整資訊,編譯器直接讀取中繼資料解析相依,無需標頭檔。
  • CIL/MSIL:中繼指令碼,由 VES(CLR)即時編譯執行。

CLI 型別分類

分類關鍵字特性範例
參考型別ref class/structGC 堆分配、參考語意、支援繼承、虛函數、介面String, 自訂類別
實值型別value class/struct堆疊/內嵌分配、複製語意、無繼承、輕量int, DateTime, Point
介面interface class/struct純合約、多重實作、無欄位、無建構子IEnumerable, ICloneable
委派delegate函數包裝、多播、型別安全EventHandler, Comparison
列舉enum class強型別、具底層型別、作用域限定TransactionType

ref class 完整範例: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()) return false;
        Point^ p = safe_cast(obj);
        return X == p->X && Y == p->Y;
    }
    virtual int GetHashCode() override { return X ^ (Y << 1); }
    virtual String^ ToString() override { return String::Format("({0},{1})", X, Y); }
};

關鍵語法重點

  • property:編譯器自動產生 get_X/set_X 方法,支援唯讀/唯寫/存取層級差異。
  • virtual ... override:明確覆寫基類虛擬方法,編譯器檢查簽章一致。
  • safe_cast:執行期型別檢查轉型,失敗拋 InvalidCastException(優於 static_cast)。
  • gcnew:配置於 GC 堆,回傳控制碼 ^。

命名空間與 using

所有 BCL 型別位於 System 或巢狀命名空間。using namespace System; 可省略前綴。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved