1. Why need it?
Mainly it works as the bridge between managed code and native c++ code, as it's the only graceful way to be able to talk to both sides.
Using /cli compiler option, it can generate mixed code to benefit below cases:
1.相信大多数公司都有一些旧的C++代码。在C++大行其道的时代,我们在C++上已经进行了大量投资,也许也产生了不少稳定的产品。在.NET大潮汹涌的今天,我们有必要重写这些代码吗?当然没有必要,要知道Legacy代码,并非指代码有问题,相反大多数这样的代码是成熟的产品,也经过了多外的检测。如果重写的话,不说工作量有多少,Bug肯定会引入不少,还要重新进行测试。可以说是出力不讨好。
2.dotNET的出现不会把C++逼入绝境,在一些对速度有要求的场合如算法的实现,模式的识别,驱动程序等,还得要C++。任意语言都不是完美的。虽然我们都在追求完美,但是完美并不存在。所以我们也要进行一些权衡。
3. 有时我们需要的第三方软件只有C++接口,我们没有源代码,所以我们没有重写代码的可能。但我们通过C++/CLI可以写一个Wrapper来供.NET使用。
4. 有时出于代码安全性考虑,把一些敏感算法用非托管代码实现,毕竟托管代码很容易被反编译
2. Basic Syntax
1. ref/ value
ref /value class / struct: reference type + value type.
2.Boxing / unboxing
(example)
int i =123;
int^ hi= i;
int c =*hi;
hi =nullptr;
3. new keywords
gcnew: allocate reference type object onto managed heap.
Type^:declare a handle that just like CSharp reference and C++ native pointer.
reference: http://msdn.microsoft.com/en-us/library/ms379617(VS.80).aspx