Windows Runtime 类型系统

WinRT API是用native C/C++暴露出来的,因为做为平台级代码必须保证高效和节省内存。但是WinRT API可以被C/C++,C#,VB,JS调用。要从这些语言调用,就得定义一套简单的类型系统,而且要支持所有这些语言。下面这些基本概念要搞清楚:

基本类型:WinRT 组件没有共同的基类,当用C#使用WinRT组件时,CLR让WinRT组件看起来像是从System.Object派生的。另外,所有WinRT组件都实现成了扩展的COM对象。而在内部,CLR使用RCWs(Runtime Callable Wrappers)访问他们。调用一个RCW的成员会引起托管代码到本地代码的转换,会损失一些性能。

核心数据类型:WinRT类型系统支持Booleans,Unsigned Bytes,16位、32位、64位signed和unsigend整型,单、双精度浮点数。16位字符,还有void。在CLR中,所有其他类型都是从这些核心类型组合而成,整个列表可在http://msdn.microsoft.com/en-us/library/br205768(v=vs.85).aspx.找到。

类(class):winrt是一套面向对象的类型系统,意思是说winrt组件支持数据抽象,继承,和多态。(数据抽象是强制的,因为winrt的class不允许包含公有的field),但是有些语言(像js)不支持类型继承,为了迎合这些语言,几乎没有winrt组件利用继承,意味着也不利用多态。事实上,只有非js语言可以使用winrt组件的继承和多态。只有xaml组件利用继承和多态,js用html和css构建界面。

结构体:winrt支持结构体(值类型),不像clr的值类型,winrt的结构体只能包含核心数据类型的公有字段或者其他winrt结构体。(枚举也行)。

枚举:winrt支持两种枚举,一种是互斥的signed32位整形,另一种是unsigned 32位整形with bit flags that can be Or’d together .
接口:winrt内部使用扩展版的COM,需要用接口描述api,然后class实现一个或多个接口。所以相比起.net类型,c#开发者更多的是用接口与winrt类型交互。

另外:winrt类型系统支持delegate,方法,属型(但不支持索引属性),事件,异常,和数组(只支持一维基于0的


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值