BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Reflection API因Windows商店应用作调整

| 作者 Roopesh Shenoy 关注 0 他的粉丝 ,译者 臧秀涛 关注 2 他的粉丝 发布于 2012年9月14日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

相对于完整的.NET 4.5框架来说,用于Windows Store应用的.NET API子集则显得如此之小。 具体而言,Reflection.Emit变得不可用,且System.Type类中的大多数成员也都被迁移到了System.Reflection.TypeInfo类中。

.NET团队把System.Type分解成了两个类——System.Reflection.TypeInfo和一个简化的System.Type——主要意在将类型定义与类型引用分离。早在处理程序集时,就已采用了这种划分方法。Brandon Bray在《Evolving the .NET Reflection API》一文中解释到:

System.Reflection.Assembly类代表的是程序集定义,而System.Reflection.AssemblyName类代表的是程序集引用。前者提供了丰富的功能集合,而后者只是数据,它可以帮助你得到想要的定义。这正是我们想为System.Type采用的模型。

Type仅提供了对某一类型的引用,并未加载类型本身的所有元数据。所有丰富的信息都在TypeInfo中——对于给定的Type,你可以通过该类型的TypeInfo来访问它的元数据。这种方式的优点是,访问Type对象的时候并不需要加载必要的程序集——仅当访问TypeInfo类的时候才需要。这意味着,是否需要加载程序集可以由开发者根据需要来控制。

为了保持更好的工作集和响应能力,Reflection API也开始用 IEnumerable类型来替代常见的数组类型的返回值。

兼容性:新的Reflection API中的这种改变并非破坏性的——Windows Store中的应用必须使用新模型,而对于以.NET 4.5框架为目标的代码而言,早期的.NET 4.0模型和新模型皆可使用。为了实现这一点,.NET框架使用的类型层次结构稍微有点不同。假如你想在.NET 4.5和Windows Store应用之间复用代码的话,微软建议你将其包装为一个可移植的类库

查看英文原文Reflection API Changes For Windows Store Apps


感谢贾国清对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT