最近做了一个C++ CLI的项目,感觉还是有很多注意事项的。现在写下来与大家分享,希望能对大家有所帮助。本文不会讨论更多理论上的东西,只会从实用角度出发,把相关语法内容过一遍。
1) 属性
C++ CLI声明属性,需要使用property关键字。在属性内,需要通过get函数、set函数来设定私有的field值。
千万别忘了,在属性声明结束后要加分号。
使用C#声明属性:
Code
private int _age;
public Age
{
get{return _age;}
set
{
if(0>value || value>= 150)
throw new Exception();
_age = value;
}
}
使用C++ CLI声明属性:
Code
private:
int _age;
public:
property int Age
{
int get(void){return _age;};
void set(int value)
{
if(0> value || value >= 150)
throw gcnew Exception();
_age = value;
};
};
2) 方法
当使用override关键字重载虚方法,或者使用new关键字覆盖基类方法时,关键字要写在方法名称和参数列表后面。
使用C#声明:
Code
public class A
{
public int Add(int a,int b){return a + b;}
}
public class B : public A
{
public new int Add(int a,int b){return a + b;}
}
protected override void OnPaint(PaintEventArgs pevent)
使用C++ CLI 声明:
Code
public ref class A
{
public int Add(int a,int b){return a + b;}
}
public ref class B : public A
{
public:
int Add(int a,int b) new {return a + b;)
}
protected void OnPaint(PaintEventArgs pevent) override
3) 事件:
这是C++CLI中比较烦人的部分,代码声明类似于属性声明。事件中的两个默认函数是add和remove。
使用C++ CLI声明事件:
Code
private:
EventHandler^ _AxDownloadComplete;
public:
virtual event EventHandler^ AxDownloadComplete
{
virtual void add(EventHandler^ value)
{
_AxDownloadComplete += value;
};
virtual void remove(EventHandler^ value)
{
_AxDownloadComplete -= value;
};
};
4) 参数
在C#需要传递引用,使用ref关键字。在C++ CLI中与之对应的是%,在C++ CLI中没有out关键字。
使用C#声明:
Code
public void GetObject(ref Object o);
使用C++ CLI声明:
Code
public:
GetObject(Object