C++.NET编程体验

来源:互联网 发布:蒋介石的人际网络 pdf 编辑:程序博客网 时间:2024/06/06 07:44

C++.NET编程体验……

 (2010-04-24 13:35:57)
转载
标签: 

it

 

c

 

托管

 
  作为一个.NET的程序员,至少要懂得里面三门语言中的一种。当然,最最好的是三门你都懂。

  虽然有人说,现在用的最好的.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<int>a=gcnew   array<int>(8);

  声明一个二维字符串数组的托管C++形式应该为:

  array<array<String^>^>^   a=gcnew    array<array<String^>^>(8)(6);

  我也不知道微软为什么要在托管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会好一些吧!

  暂时就这些了!

0 0