.NET或将引入类型类和扩展_2

背景:


阅读新闻

.NET或将引入类型类和扩展

[日期:2017-04-18]

来源:infoq.com

作者:Jonathan Allen ,译者 谢丽

[字体:大 中 小]

类型类是另外一项正被考虑引入.NET未来版本的特性。在提案“外观和扩展(Shapes and Extensions)”中,该特性被称为外观,它们将大幅提升.NET泛型的能力。Mads Torgersen这样描述类型类:

接口抽象的是作为类型实例的对象和值的“外观(shape)”。从根本上讲,类型类背后的思想是抽象类型本身的外观。而且,当通过类型声明引入需要的类型实现一个接口时,其他人可以在单独的代码中实现类型类。

类型类解决了一个长期存在的接口问题:它们无法处理静态函数或操作符重载。这导致了一些问题,比如,在数学库中,对于不同的数值数据类型,需要反复声明相同的函数。

Mads总结道:

一般来说,外观的声明和接口声明非常像,但它:

几乎可以定义任意类型的成员(包括静态成员)

可以通过扩展实现

可以在特定的地方像类型一样使用

最后一个限制很重要:外观不是类型。外观的主要目的是作为泛型的一种约束,限定类型参数,保证它们有正确的外观,并允许泛型声明体使用那个外观。

与外观的思想紧密相关的是一种经过改进的扩展语法。扩展结构几乎可以为类型类提供任何东西,而不只是方法扩展。考虑下面这个最简单的例子:

Int32类型已经提供了大部分内容,但它缺少zero属性。扩展可以修复这个问题:

然后,你可以像下面这样使用它:

实现

这实现起来需要一些接口和结构方面的技巧。

Shapes被翻译成了接口,每个成员(甚至是静态成员)都转换成了接口中的实例成员;

扩展被翻译成了结构,每个成员(甚至是静态成员)转换成了结构中的实例成员;

如果扩展实现了一个或多个弯管,则底层的结构实现了那些外观的底层接口。

通常,上述结构被称为“见证结构(witness struct)”。它的存在可以证明一个类遵循外观的规则。或者换句话说,该类在类型类中。

编译器会将上述AddAll方法翻译成如下代码:

然后,上述见证结构就可以用于向AddAll方法提供必要的功能。结构可以直接在类型上调用方法或者根据需要使用扩展结构。

在类和接口中实现外观

使用和我们扩展基类及实现接口一样的语法,类可以显式实现一个外观。然后,编译器会提供相应的见证结构。

也可以将接口标记为满足外观的要求。下面是一个例子:

由于IComparable和理论上的类型类之间存在一对一关系,所以我们不需要为扩展结构提供扩展体。

泛型类型

事实证明,泛型类型有他们自己的问题。和泛型方法一样,向泛型类添加外观或者类型类作为类型约束需要额外提供一个类型参数。在泛型类上,由于类型参数的数量是其名称的一部分,所以这会导致它和其它名称相同的泛型类型发生冲突。

扩展外观

扩展结构不仅可以用于实现外观,还可以扩展它们。因此,你可以向现有的外观中添加新方法、静态方法及操作符。正如扩展方法一样,语法是一样的,就像它们在底层类型上直接定义了一样。

评论

总的来说,人们对于该特性的反应不错。不过,也有一些修改请求。例如,外观目前必须显式实现。有些开发人员希望,如果特定的类或接口不需要额外扩展方法时,就由编译器隐式实现。Mads列举了这样做的一些问题:

那可能会导致,为了见证以相同的方式应用到同一类型的同一个外观而生成许多结构类型,有生成的类型过度扩散的风险。如果编译器比较聪明,每个程序集只生成一个,或许可以缓解这种情况,但我们从匿名类型了解到,这种重复数据删除技术非常困难,而且很容易出错。

如果我们允许泛型类型拥有外观约束的类型参数,那么同一个东西拥有多个见证结构会导致实例化的泛型类型具有不同的类型标识,无法互换。

人们还担心外观和扩展绑定得太紧。他们认为,那将来可能会引起混淆。

对此,Mads答复说:

合并:在我的提案里,“扩展”实际上合并了多个问题:

[……]

我觉得,对于上述服务于所有这些目的的语言机制,有太多内容需要讨论——但归根结底,它们的关系非常密切。如果有一个提案可以将它们清晰地分开,那将是非常有意义的。那也许会更加简单有效。

查看英文原文:.NET Futures: Type Classes and Extensions

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142894.htm

linux

在Elasticsearch中应用机器学习排序LTR

Log4J的Appenders配置

相关资讯

.NET

MailKit正式替换了.NET的 (今 09:11)

Microsoft规划了.NET的未来发展 (02月09日)

.NET平台上的分布式编程框架MBrace (11/23/2015 10:22:19)

.NET 诞生 15 周年 (02月14日)

为什么.NET感觉上比Java差一点 (10/02/2016 08:11:39)

.Net开发框架最终版将与Windows 10 (07/2九度快排系统 https://www.190seo.com5/2015 05:49:19)

本文评论

查看全部评论 (0)

表情: 表情

姓名:

匿名

字数

同意评论声明

评论声明

尊重网上道德,遵守中华人民共和国的各项有关法律法规

承担一切因您的行为而直接或间接导致的民事或刑事法律责任

本站管理人员有权保留或删除其管辖留言中的任意内容

本站有权在网站内转载或引用您的评论

参与本评论即表明您已经阅读并接受上述条款

最新资讯

Log4J的Appenders配置

CentOS虚拟机和物理机共享文件夹实现

CentOS7.0下Rsync+sersync实现数据实时增量

Google Hire 首页默默推出,LinkedIn 要小

.NET或将引入类型类和扩展

2017年会是Serverless爆发之年吗?

Apache Tomcat信息泄露漏洞(CVE-2017-5651)

Trend Micro Threat Discovery Appliance命

Google gRPC 堆缓冲区溢出漏洞(CVE-2017-

Shadow Brokers 最新泄密暴露 NSA 与

背景:

阅读新闻

Google Hire 首页默默推出,LinkedIn 要小心了?

[日期:2017-04-18]

来源:瘾科技

作者:Linux

[字体:大 中 小]

Google 即将要有个新的「人力雇用」用途的网站推出,它就叫做 Google Hire(怎么不叫 GooJob)。这个已经开放首页但仍不可登入的入口网站,根据官方向我们 Engadget 所提供的说法,这是个希望帮助 G Suite 用户更有效率管理人力雇用事宜的开发中产品。而尽管部分网站猜测 Google Hire 可能会有类似 LinkedIn 的求职社交功能,甚至有隐私方面的疑虑。不过这点根据官方在信件中给予我们的回覆,这个网站将只被用于接受求职申请,并不会将相关私人信息乃至于 Google 中的使用者信息予以分享,所以现阶段理应是不太需要担心会有这方面的状况。

其实不仅 Google,就连 Facebook 近几个月也已经开始提供求职相关的功能了,由此可见各家似乎都有点想利用自己在相关领域上的优势,来挑战 LinkedIn 所开启的求职市场应用。但到底能有多少效果或者是多高的使用率,显然就还有待未来正式上线才能见真章了。

经由: Engadget, Daily Mail, Android Authority

来源: Axios

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142895.htm

linux

2017年会是Serverless爆发之年吗?

YouTube 放宽移动设备直播资格,1000 以上订阅数即可使用

相关资讯

LinkedIn Google Hire

LinkedIn 开源 Kafka Cruise (今 10:57)

俄罗斯开始屏蔽LinkedIn (11/17/2016 21:49:58)

LinkedIn开源软件项目数量已经超过 (08/08/2016 08:32:18)

搜索巨人开发招聘网站 Google Hire (04月17日)

LinkedIn Test Butler旨在改进 (08/31/2016 08:42:46)

LinkedIn的工程师详述了生产环境下 (06/22/2016 09:13:45)

本文评论

查看全部评论 (0)

表情: 表情

姓名:

匿名

字数

同意评论声明

评论声明

尊重网上道德,遵守中华人民共和国的各项有关法律法规

承担一切因您的行为而直接或间接导致的民事或刑事法律责任

本站管理人员有权保留或删除其管辖留言中的任意内容

本站有权在网站内转载或引用您的评论

参与本评论即表明您已经阅读并接受上述条款

最新资讯

LinkedIn 开源 Kafka Cruise Control

新勒索软件“Defray”可通过Microsoft Word

排序算法之冒泡排序详解

C++多态分析

Ubuntu 16.04 安装搭建Red5流媒体服务器

Ubuntu 16.04下交叉编译ImageMagick

关于开源软件,你所不知道的那些事情

Go 1.9引入了类型别名并提升了运行时和工具

GitHub正在寻找新的CEO

发达国家与发展中国家编程语言技术的分布差

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,907评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,068评论 4 62
  • 天作孽,犹可违;自作孽,不可活。 《孟子》 句意:天降的灾祸还可以躲避,自己造成的罪孽是无法逃脱的。
    xcy无名阅读 682评论 0 0
  • 个人简介 李振海,男,号:一弘弘一。出生于江苏无锡,十岁从师习连环画,书法。1976年毕业于无锡轻工业学...
    艺术范阅读 4,371评论 0 0
  • 为了做好阅读启蒙,抓住8岁以前这个黄金时期培养孩子的阅读兴趣和能力,小种子班每天有一个常规家庭作业:家长...
    H家女阅读 1,150评论 0 1