網站首頁 編程語言 正文
C#和C++是非常相似的兩種語言,然而我們卻常常將其用于兩種不同的地方,C#得益于其簡潔的語法和豐富的類庫,常用來構建業務系統。C++則具有底層API的訪問能力和拔尖的執行效率,往往用于訪問底層模塊和構建有性能要求的算法。
這兩種場景看起來有較大的差異,大多數的時候可以各行其道。但還是有很多時候會出現融合的情況。當我們構建分布式系統的時候,由于RPC機制一般都是語言無關的,我們大可以將其各盡所長,按需劃分在最能發揮其長處的位置。然而,一旦我們需要構建融合兩者需求的集中式系統的時候,就會頭痛無比。
此時,我們可以使用C++/CLI搭建C++和.Net之間的橋梁,C++/CLI是一個比較有意思的兩棲模塊,它具有如下特點
既可以訪問.Net類庫,也可以訪問C++原生類庫
既可以被.Net程序引用,也可以被C++原生程序引用
使用C++/CLI,我們可以使用C++編寫算法,用C#編寫界面,也可以使用.Net Framework類庫增強C++程序功能,各取所長。
下面我們就以一個簡單的例子來演示一下它的用法:
Calculator.h:
#pragma?once
namespace?CppCliTest
{
public?ref?class?Calculator
{
public:
int?Add(int?a,?int?b);
};
}
Calculator.cpp
#include?"stdafx.h"
#include?"Calculator.h"
namespace?CppCliTest
{
int?Calculator::Add(int?a,?int?b)
{
return?a?+?b;
}
}
main.cpp
#include?"stdafx.h"
#include?"Calculator.h"
using?namespace?System;
using?namespace?CppCliTest;
int?main(array<System::String?^> ^args)
{
Calculator^ calculator =?gcnew?Calculator();
int?result = calculator->Add(3, 2);
Console::WriteLine(L"Result is {0}", result);
return?0;
}
從這個例子中,我們可以簡單的管中窺豹的看看C++/CLI是在C++的基礎上擴充了一套語法,使其具有訪問.Net原始的功能,這里用到的有:
使用ref?class聲明CLI引用類型(C#中的class)
使用^(例如如這里的String?^)來定義CLI引用類型
使用gcnew創建CLI的引用類型
具體的功能我將在后面的文章中再做介紹,MSDN中也有文檔詳細的介紹了這些語法:https://msdn.microsoft.com/zh-cn/library/ms235289.aspx
雖然C++/CLI同時具有兩者的功能,但它使得本就比較復雜的C++語法變得更加復雜了(特別是初期的版本,非常復雜,現在已經簡化了不少了),并且長期沒有得到VisualStudio這宇宙第一IDE的較好支持(在VS2010的時候還不支持智能提示),是無法與擁有大量語法糖的C#比開發效率的。加上大多數需求場景可以通過分布式系統解決,這些都導致了它一直沒有得到太多的關注。但是,微軟還是在積極的改進它的,加上C++11的支持,現在已經比之前好用多了,如果用在合適的位置,是絕對能讓你的開發如魚得水的。
原文鏈接:https://www.cnblogs.com/TianFang/p/4931879.html
相關推薦
- 2022-11-27 Unity?數據存儲和讀取的方法匯總_C#教程
- 2022-05-21 基于C++實現信息管理系統_C 語言
- 2022-04-03 用Python實現控制電腦鼠標_python
- 2022-03-27 pygame實現貪吃蛇游戲_python
- 2023-03-01 Golang?Makefile示例深入講解使用_Golang
- 2022-05-13 Missing essential plugin: org.jetbrains.androidPle
- 2022-06-14 ASP.NET?Core?MVC在視圖中使用依賴注入_實用技巧
- 2022-04-20 appium中常見的幾種點擊方式_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支