CLR 存取修飾詞超越原生 C++ (public/private/protected),可定義命名空間、巢狀型別的可見度,並針對組件內外分別控制。
public/private 指定組件外可見度,預設 private。public ref class ReferenceType {
public: // 組件內外皆可見
private public: // 僅組件內可見
protected public: // 組件內全可見;組件外僅繼承類別可見
};
CLR 型別僅含方法與欄位,屬性為中繼資料標記的方法組合。C# 支援最佳,Managed C++ 需 __property 關鍵字且關聯不明確。C++/CLI 設計簡潔強大:
property String^ Name {
String^ get() { return m_value; }
void set(String^ value) { m_value = value; }
}
編譯器自動產生 get_Name/set_Name 及中繼資料。支援非對稱存取性:
property String^ Name {
public: String^ get();
private public: void set(String^);
}
簡易屬性語法:property String^ Name; 編譯器產生預設實作 (私有支援欄位),未來可替換實作不破壞介面。
原生 C++ 函式指標受限於特定簽章。CLR 委派類似函式指標但更強大:目標方法屬於任何型別,只要簽章匹配即可綁定;支援多播鏈結。
delegate void Function();
ref struct ReferenceType {
void InstanceMethod() {}
static void StaticMethod() {}
};
// 建立委派綁定實例方法
Function^ f = gcnew Function(gcnew ReferenceType, &ReferenceType::InstanceMethod);
// 綁定靜態方法並組合多播
f += gcnew Function(&ReferenceType::StaticMethod);
// 呼叫
f();
C++/CLI 提供空前威力與優雅語法:精細存取性控制、原生屬性支援、型別安全委派,讓開發者在不犧牲簡潔性、編程/執行效率下,完全使用 C++ 編寫豐富 .NET 應用。