一组编码规范,通过C#调用C++ 自动封装的C# SDK,会发现面向对象思想的重要性。
C++ SDK可以使用自动封装工具转换成C# SDK。但需要遵守如下规则:
1.如果需要对C#对象进行判断,则分如下三种情况(以BMPPen为例):
判断C#对象本身是否相等
bool isEqual=object.Equals(bp1,bp2);
判断C#持有的C++对象的指针是否相等
bool isEqual=(bp1.NativeObject==bp2.NativeObject);
判断C#对象持有的C++对象的值是否相等
bool isEqual=(bp1==bp2);
2.关于派生:C#可以派生于C++自动封装的C#类
C#可以重写C++的虚方法
允许C#增加非公有方法、非公有属性
当C#增加公有方法、公有属性时,必须使用组合的方式
3.生命周期:谁申请,谁释放(C++自动封装的C# SDK对象需要调用此对象的Dispose())
4.智能指针:智能指针的生命周期与对象生命周期一样,智能指针对象只是一种特殊的对象,这个对象通过引用计数的方式来管理其聚合的另一个对象的内存。值得注意的是:智能指针对象被销毁时,只是将引用计数递减,并不一定会销毁聚合对象,只有引用计数等于0时,才会销毁聚合对象。C#调用智能指针对象后,一定要显式释放智能指针对象,否则智能指针对象的引用计数不会递减;而C++程序中,智能指针对象会即时释放。