Pro visual c++/cli and .net 2.0 platform2 学习笔记(10 第四章 高级C++/CLI)

第四章 高级C++/CLI

头文件中可以有类的实现,但不能有类成员函数的实现。

c++的名字空间,缺省publicc++/CLI缺省:privatejava c#也是private)。作者反对这样,因为与c++不一致。

使用程序集不需要他的头文件,这是与c++的不同之处。因为程序集是自描述的。

模板

托管扩展c++好像不支持模板。

c++/CLI的模板和c++相同。c++程序员应注意的是,模板是verifiable,并且只能被在一个程序集内有用。建立跨程序集应用的模板要用到.netgenerics

模板的定义和实现必须在同一个文件。

<skip>//大家可以参看c++primer

模板特化:你的模板可能不支持某种类型的参数,所以写一个特定的版本。

Generics

语法与模板相同,generic代替template

generic不支持特化和缺省参数。

generics运行时实例化(同一generics只有一个程序集)。模板编译时实例化,所以同一模板被实例化为不同的程序集。

子类型约束:语法 where

跨语言支持。

异常

跨语言支持

System::Exception .net所有异常的集类。派生出两类异常ApplicationException(用户定义的异常);SystemException。

不是继承于System::Exception的异常不支持跨语言。

异常被处理后从try结尾处重新开始执行。

catch(…)unsafe的。仅应该用在测试阶段。

finally:不管try块执行否,都要执行的语句块。

委托

.net有两种委托:System::Delegate和System::MulticastDelegate

c++/cli只支持System::MulticastDelegate,不过没关系。

委托被编译为一个类。

语法:delegate-name (address-of-method);

        delegate-name (handle-of-object, address-of-method);

        say+= gcnew SayDelegate(&Talkative::SayHiThere);

        SayDelegate ^say =

         (SayDelegate^)(Delegate::Combine(say, gcnew SayDelegate(&SayHello)));

Combine,Remove。建议使用重载(编译器自动产生)的+-操作符。

        say->Invoke("Mr Fraser");

        say("Stephen");

命名约定:委托后缀delegate,事件handler

不必检查nullptr(托管扩展c++这样做了)

事件

和事件相关有一个全局的委托。

<skip>

事件源

事件接受者

//这里介绍的很见单,需要进一步学习<todo>

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值