C++ CLI 程序编写注意事项
2008-08-03 06:21
751 查看
最近做了一个C++ CLI的项目,感觉还是有很多注意事项的。现在写下来与大家分享,希望能对大家有所帮助。本文不会讨论更多理论上的东西,只会从实用角度出发,把相关语法内容过一遍。
1) 属性
C++ CLI声明属性,需要使用property关键字。在属性内,需要通过get函数、set函数来设定私有的field值。
千万别忘了,在属性声明结束后要加分号。
使用C#声明属性:
public class A
public class B : public A
protected override void OnPaint(PaintEventArgs pevent)
使用C++ CLI 声明:
public ref class A
public ref class B : public A
private:
EventHandler^ _AxDownloadComplete;
public:
virtual event EventHandler^ AxDownloadComplete
public void GetObject(ref Object o);
使用C++ CLI声明:
public:
GetObject(Object^ % o);
5) 创建对象
在C++ CLI中可以通过new 关键字创建非托管对象。使用gcnew创建托管对象。编译器在编译时会自动检查对象的类型。
6) 实现接口
在C#中,一个类无需显式的继承接口。比如:
public interface ITest
public class MyControl : Control,ITest
public interface class ITest
public ref class Impl : ITest
{
{return a + b;}
};
将实现方法用virtual 关键字修饰,以便编译器能够正确识别该方法为虚方法,将其指向函数的指针放入虚表内。
这就带来一个问题,如果你声明了一个根据System::Windows::Forms::Control类成员的一个接口IControl,然后声明一个类MyControl,该类继承了System::Windows::Forms::Control类和IControl接口。那么,C++编译器将不会认为MyControl类已经实现了IControl接口,而导致大量的编译错误。原因就是System::Windows::Forms::Control类的大部分方法都不是虚方法,C++编译器无法直接把基类的方法放入虚表中实现多态。因此只能自己再将Control类在封装一遍。
1) 属性
C++ CLI声明属性,需要使用property关键字。在属性内,需要通过get函数、set函数来设定私有的field值。
千万别忘了,在属性声明结束后要加分号。
使用C#声明属性:
public class A
public class B : public A
protected override void OnPaint(PaintEventArgs pevent)
使用C++ CLI 声明:
public ref class A
public ref class B : public A
private:
EventHandler^ _AxDownloadComplete;
public:
virtual event EventHandler^ AxDownloadComplete
public void GetObject(ref Object o);
使用C++ CLI声明:
public:
GetObject(Object^ % o);
5) 创建对象
在C++ CLI中可以通过new 关键字创建非托管对象。使用gcnew创建托管对象。编译器在编译时会自动检查对象的类型。
6) 实现接口
在C#中,一个类无需显式的继承接口。比如:
public interface ITest
public class MyControl : Control,ITest
public interface class ITest
public ref class Impl : ITest
{
{return a + b;}
};
将实现方法用virtual 关键字修饰,以便编译器能够正确识别该方法为虚方法,将其指向函数的指针放入虚表内。
这就带来一个问题,如果你声明了一个根据System::Windows::Forms::Control类成员的一个接口IControl,然后声明一个类MyControl,该类继承了System::Windows::Forms::Control类和IControl接口。那么,C++编译器将不会认为MyControl类已经实现了IControl接口,而导致大量的编译错误。原因就是System::Windows::Forms::Control类的大部分方法都不是虚方法,C++编译器无法直接把基类的方法放入虚表中实现多态。因此只能自己再将Control类在封装一遍。
相关文章推荐
- 使用C/C++语言编写基于DSP程序的注意事项
- 编写跨平台Java程序注意事项
- java-编写跨平台Java程序注意事项
- [C++/CLI] C# C++/CLI 混合编程类型转化注意事项
- 程序——在DispatchAction中定义多业务编写中的问题及注意事项
- 一段评价程序平均运行时间的shell脚本&shell脚本编写注意事项
- Delphi编写服务端程序注意事项
- 编写跨平台Java程序注意事项
- 编写Windows Mobile上基于WTL封装的CHTMLCtrl程序注意事项(备忘)
- 编写跨平台Java程序注意事项
- C++编写JNI注意事项
- 编写hadoop程序的注意事项
- 编写Windows Mobile上基于WTL封装的CHTMLCtrl程序注意事项(备忘)
- 编写跨平台Java程序注意事项
- 编写跨平台Java程序注意事项
- 编写跨平台Java程序注意事项
- MFC程序编写注意事项
- asp.net程序编写注意事项!
- 编写跨平台Java程序应注意的12条事项
- c#程序调用c++编写dll需要注意问题