网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C# > 正文
C++/CLI中类的本质分析
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/14
下载{$ArticleTitle}原创论文样式
gcnew 关键字创建。

       ComplexMath ^CM1=gcnew ComplexMath();

       //C++/CLI中,C++ 类的对象仍然使用new 关键字创建。

       DisplayComplex *DC1=new DisplayComplex();

       RealMath *RM1=new RealMath();

       C3=CM1->Add(C1,C2);

       C4=CM1->Minus(C1,C2);

       DC1->Display(C3);

       DC1->Display(C4);

       Console::WriteLine(RM1->Add(2,1));

       Console::WriteLine(RM1->Minus(2,1));

       //C++/CLI中,使用new 关键字创建的C++ 类的对象,仍然需要使用delete关键字删除。

       delete DC1;

       delete RM1;

    return 0;

}

程序中Complex类使用value class关键字定义,属于.NET CTS值类型(Value Types);ComplexMath类使用ref class关键字定义,属于.NET CTS引用类型(Reference Types);DisplayComplex和RealMath类则使用class关键字定义,属于C++类,其中RealMath类的定义和实现还使用了#pragma unmanaged和#pragma managed编译指示,说明RealMath类编译成本机代码,而不编译成CIL代码,以实现混合Assembly。

程序编译运行后,得到了预期结果:

3+3i

1+1i

3

1

将编译后生成的可执行文件(Assembly)TypesSample1_CPP.exe使用IDA Pro 4.8反汇编(不要使用ildasm.exe反汇编),注意使用.NET Executable文件格式反汇编,检查生成的IL汇编语言程序,可以看到下列IL汇编语言代码(去掉了部分注释,还有一部分注释是笔者加的,下同):

……

//Complex类,从System.ValueType类派生,显然是值类型。

.class private sequential sealed ansi Complex extends [mscorlib]System.ValueType

{

  .field public       float64    Re

  .field public       float64    Im

  .method public hidebysig specialname void .ctor(float64 Re, float64 Im)

  {

    ldarg.0

    ldarg.1

    stfld float64 Complex::Re

    ldarg.0

    ldarg.2

    stfld float64 Complex::Im

    ret

  }

}

//ComplexMath类,从System.Object类派生,显然是引用类型。

.class private auto ansi ComplexMath extends [mscorlib]System.Object

{

  .method public hidebysig value class Complex Add(value class Complex OpNum1, value class Complex OpNum2)

  {

    .locals (value class Complex V0)

    ldloca.s 0

    initobj Complex

    ldloca.s 0

    ldarga.s 1

    ldfld float64 Complex::Re

    ldarga.s 2

    ldfld float64 Complex::Re

    add

    stfld float64 Complex::Re

    ldloca.s 0

    ldarga.s 1

    ldfld float64 Complex::Im

    ldarga.s 2

    ldfld float64 Complex::I

  • 下一篇资讯: 评C#事件处理
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号