C++/CLI 托管C++之类、属性封装【7】

CLI封装类时,涉及确定性析构与非确定性析构,属性封装使用property。

【1】C++导出类

class  EXPORTDLL_CLASS CAddSub
{
public:
    CAddSub(){
        m_len = 0;
    }
    ~CAddSub(){

    }

public:
    int  Add(int x, int y){
        return x+y;
    }

    int  Sub(int x, int y){
        return x-y;
    }

    int  GetLength()
    {
        return(m_len);
    }

    void  SetLength(int len){
        m_len = len;
    }

private:
    int   m_len;
};

【2】CLI类封装

    /// <summary>
    /// 4 类测试
    /// </summary>
    public ref class AddSubCls
    {
    public:
        AddSubCls()
        {
            m_pCls = new CAddSub();
        }

        !AddSubCls() //确定性释放
        {
            delete m_pCls;
        }

        ~AddSubCls() //非确定性释放
        {
            this->!AddSubCls();
        }

    public:
        Int32  Add(Int32 x, Int32 y)
        {
            return(m_pCls->Add(x, y));
        }

        Int32  Sub(Int32 x, Int32 y)
        {
            return(m_pCls->Sub(x, y));
        }

        property Int32 Length
        {
            Int32 get()
            {
                return(m_pCls->GetLength());
            }

            void set(Int32 len)
            {
                m_pCls->SetLength(len);
            }
        }

    private:
        CAddSub     *m_pCls;
    };

C#测试函数:

AddSubCls addSubCls = new AddSubCls();
int sum = addSubCls.Add(1, 4);
addSubCls.Length = 6;
时间: 2024-12-27 23:26:43

C++/CLI 托管C++之类、属性封装【7】的相关文章

C# 类属性封装、字段的详解

今日敲代码时,突然感觉对类的属性封装.字段有点犯迷糊了..连基础的都不知道了,那敲的代码怎么能严谨高效的.果断拿起各种高级编程.大全啥的翻起来~~这不再把自己的理解写下来(定义都是直接抄书的),献给同样迷糊的小伙伴. 先说下类的成员,它分为数据成员和函数成员.数据成员,简单点可以理解成类的数据,包含了字段.常量(const).事件:函数成员,就是操作类中的数据,包含方法.属性.构造函数.终结器(析构函数).运算符.索引器.(就提一下,方便后面说下去,要都解释就偏题了)字段就是类里定义的变量,而属

java 属性封装

//封装性 //封装概念: //1.是面向对象思想的三大特征之一 //2.封装细节是隐藏的,仅对外提供访问接口 //3.封装分类: //属性封装 //方法封装 //类的封装 //组件的封装 //模块化封装 //系统级封装 //封装好处: /** 模块化 信息隐藏 代码重用 插件化易于调用 具有安全性 */ //最简单的属性封装: public class Test17{ public static void main(String args[]){ Dog d1=new Dog(); //d1.

struts2获取表单数据之 属性封装 模型驱动 表达式封装 对象封装到list集合 对象封装到map集合 五种方便的封装方式

一.属性封装 属性封装是在action里面设定属性值,属性名字一定要和表单中的name一样,action中extends ActionSupport demo1.jsp: <body> This is my login JSP page. <br> <form action="demo1.action" method="post" > username<input type="text" name=&qu

Struts2框架的数据封装一之属性封装(属性封装的第二种方式:封装成javaBean)

Struts2中提供了两类数据封装的方式? 第一种方式:属性驱动(有两种方式:一个对属性,另外一个是将参数封装到javaBean中) B. 在页面上,使用OGNL表达式进行数据封装.(将参数封装到javaBean中) * 在页面中使用OGNL表达式进行数据的封装,就可以直接把属性封装到某一个JavaBean的对象中. * 在页面中定义一个JavaBean,并且提供set方法:例如:private User user; * 页面中的编写发生了变化,需要使用OGNL的方式,表单中的写法:<input

C++/CLI 托管C++之结构体封装(内存对齐#pragma pack)【9】

CLI封装涉及内存对齐的结构体时,使用的是StructLayoutAttribute,指定Pack为1.4.8等属性. [1]C++导出函数,使用 1位对齐 #pragma pack(push) #pragma pack(1) typedef struct _testStru2 { int iVal; char cVal; __int64 llVal; }testStru2; #pragma pack(pop) //4.2 结构体边界对齐 EXPORTDLL_CLASS void Struct_

C++/CLI 托管C++之联合体union封装【10】

CLI封装Union时,没有对应的类型,使用的是结构体struct,指定每个元素的偏移位置. [1]声明结构体struct时,需要显示指定为Explicit. [2]每个数据需要使用FieldOffsetAttribute指定偏移位置. C++导出函数 typedef union _testStru4 { int iValLower; int iValUpper; struct { __int64 llLocation; }; }testStru4; //4.4 union类型中含有结构体 EX

C++/CLI 托管C++之导出注释【11】

将封装好的CLI Dll提供给NET使用时,当然少不了注释的添加.本文就是介绍使用XML注释的方式,获取Dll对应的注释.涉及两点: [1]CLI的成员的注释需要按照标准的方式进行添加,简单点就是C#怎样添加注释///, CLI也要按照同样的方式添加,如下图: /// <summary> /// 1 字符串测试类 /// </summary> public ref class StrCls { public: /// <summary> /// 1.1 字符串作为输入参

C++/CLI 托管C++的数组介绍【4】

托管数组实际是System::Array 类型的对象,因此在 C++/CLI 程序中创建的托管数组能使用该类提供的各种方法和属性. [1] 定义  [qualifiers] [cli::]array<[qualifiers]type[,dimension]> ^var; qualifiers  存储方式说明(可选项).可选择的存储方式包括:mutable, volatile,const,extern和 statc. array 托管数组定义的关键字,该关键字是定义在cli 名 域中的.托管程序

C++/CLI 托管C++的基本数据类型及函数【3】

在 C++/CLI 扩展中提供了基元数据类型的别名,这些别名与 C++中提供的内置数据类型名相同. 提供的主要基元数据类型与(C++/CLI 类型)别名如下: 基元数据类型 C++/CLI 类型 说明 Boolean bool 布尔类型 Byte char 8位无符号整数 SByte signed char 8 位有符号整数 Char __wchar_t 16位Unicode 字符类型 Int16 short 16位有符号整数 UInt16 unsigned short 16 位无符号整数 In