WinRT的ref类 —— 微软神雕乱枪改C++系列

什么是C++\CX的Ref类?你可以理解为浆糊类,什么是浆糊类?
浆糊类就是 —— 用C++的语法写C#!
听到这个你肯定尿了。
你可以捂着裆继续看下去。

在继承和接口上:
C++ —— 多重继承、实现多个接口。
C# —— 单一继承、实现多个接口。
Ref类 —— 单一继承(只能public继承Ref类)、实现多个接口(可不是C++的接口,是Ref类接口)。
【总结:Ref类 = C#类】

默认根对象上:
C++ —— 没有。一个class CXXX就是CXXX,它没有继承什么东西。
C# —— 全部继承System.Object,比如ToString()方法。
Ref类 —— 全部继承Platform::Object,你可以重写ToString()方法。
【总结:Ref类 = C#类】

类型系统:
C++ —— 爱咋玩咋玩。
C# —— 那几个,Int32、UInt32等。
Ref类 —— 同上。
【总结:Ref类 = C#类】

观察者模式:
C++ —— 一般使用virtual。即子类实现父类的PURE函数,基于多态。
C# —— 委托,事件。
Ref类 —— 委托,事件。(牛逼吧,微软硬是在C++上给你造出了委托)
【总结:Ref类 = C#类】

属性:
C++ —— 用类似get_Role、set_Role这种方法来模拟属性。
C# —— property关键字。
Ref类 —— property关键字。(牛逼吧,微软硬是在C++上给你搞了事件)
【总结:Ref类 = C#类】

分部实现:
C++ —— 头文件、cpp文件,没有partial关键字。
C# —— 对类或者方法使用partial关键字,分散定义和实现。
Ref类 —— 同上。
【总结:Ref类 = C#类】

异常:
C++ —— 你抛什么都行。
C# —— 自定义的,系统图定义的。
Ref类 —— 自定义的,系统定义的,多了一个std异常。
【总结:Ref类 差不多=C#类】

数组、集合:
C++ —— 编译器数组支持,自己造轮子、或者用STL、或者重写STL,咋玩都行。
C# —— 编译器数组支持,类库。
Ref类 —— 数组映射Platform::Array,WinRT类库。(为了兼容C#)
【总结:Ref类 差不多=C#类】

字符串:
C++ —— 编译器字符串类型支持,爱咋玩咋玩。(内存就是字符串呗)
C# —— String类。
Ref类 —— Platform::String类。
【总结:Ref类 差不多=C#类】

生命周期管理:
C++ —— new、delete或者智能指针。
C# —— GC。new了坐等删除。
Ref类 —— 类似GC的东西,引用计数的智能指针,编译器实现。也是。。。new了坐等删除。
【总结:Ref类 差不多= C#类】

ref类有一个有趣的地方。
他public的东西因为要公开给C#,你不能乱来,但是private的东西不给C#,你可以乱来。
简单的比方就是:
public:
    DWORD dw; -> 死。
    bool b; -> 可以。
private:
    DWORD dw; -> 可以。
    bool b; -> 可以。

也就是,所有类型,方法,返回值,结构体,枚举,你全需要遵守C#规范。

Ref类有C#的Box\Unbox特性,牛逼吧!
Object^ obj = 5; //scalar value is implicitly boxed
int i = safe_cast<int>(obj); //unboxed with explicit cast.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值