标签: itc托管 |
虽然有人说,现在用的最好的.NET的原装语言不是C#吗?那我还学C++.NET这个累赘干什么?
当然,C++.NET又分为For Win32的MFC和For Win64的.NET,也就是所谓托管C++。
这里专门针对托管C++。
让想学托管C++的人有一个比较初步的认识。
与C#的区别。
1:C++.NET允许声明全局变量,C#不支持。
2:C++.NET的静态方法需要用成员运算符来引用。C++.NET的成员运算符是::。而C#的是点号。
例如Win64控制台应用程序。
C#版:Console.WriteLine();
C++版:Console::WriteLine();
2:C++.NET所有动态创建的类一般被声明为指针类型。
托管C++标准指针运算符是^。
示例程序:
System::Drawing::Graphics^ g=this->CreateGraphics();
3:访问被声明为指针的成员变量的方法是:
->。
示例:
this->textBox1->Text="草泥马";
4:C++.NET托管堆中构造函数使用gcnew运算符。
而C#中用new运算符。
示例:
C++.NET程序:
System::Drawing::Drawing2D::GraphicsPath^ MyPath=gcnew System::Drawing::Drawing2D::GraphicsPath();
C#程序:
System.Drawing.Drawing2D.GraphicsPath MyPath=new System.Drawing.Drawing2D.GraphicsPath();
注:
C++.NET继承了C++6.0的一些东西。所以上述程序最后的一个括号部分,C++是可以省略的,而C#是绝对不行的。
5:C++.NET的数组一律使用新版规则,原先的C++6.0数组只用于非托管部分。
以下代码在C++6.0和C#.NET中成立,而在C++.NET托管部分不成立。
int[ ] a=new int[8]; Visual C#;
int a[8]; Visual C++6.0.
对应于托管C++的形式为:
array
声明一个二维字符串数组的托管C++形式应该为:
array
我也不知道微软为什么要在托管C++中搞这一套。
但是这确实让人很烦。
原先C++6.0的形式应该为:
String a[8][6];
就算是用C#,也应该是:
String[ ] [ ] a=new String[8][6];
明显要舒服许多嘛!
可能是为了和非托管的MFC相区别吧!
但是微软这个弯子也绕的太大了点。
让人颇为不习惯!
剩下的就是事件和属性的一些区别了。
6:事件委托:
Visual C#:
this.button1.Click+=new EventHandler(Button_Click);
VC++.NET:
this->button1->Click+=gcnew System::EventHandler(this,&Form1::Button1_Click);
7:属性设置:
Visual C#:
public String wori
{
get{
return wori.ToString;
}
set
{
wori=value;
}
}
VC++.NET:
property String^ wori
{
String^ get
{
return wori->ToString();
}
void set(String^ value)
{
wori=value;
}
}
。
8:
判空部分:
Visual C#:
if Components!=null;
Visual C++.NET.
if Componens!=nullptr;
9:API函数调用
Visual C#:
[DllImport ("User32.dll")]
public extern int FlashWindow(IntPtr HWnd,bool bInvert);
Visual C++.NET:
[DllImport("User32.dll",CharSet=CharSet::Auto)]
static int FlashWindow(IntPtr HWnd,bool bInvert);
大概也就这些区别吧。
感觉上做.NET还是C#要好一些。
一方面代码提示功能较强。另一方面在引用其他窗体的时候也不必包含头文件。
比如Include "Form2.h"之类的。
但是如果考虑代码兼容。要将Win32的程序升级为Win64的话,C++.NET会是最好的一个选择。
因为你如果不信,可以吧C#的程序往C++的编译器里面贴一下,你会发现一个秘密。
那就是根本行不通。
可能在这点上VC++.NET会好一些吧!
暂时就这些了!