产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

C#和 F#默认接口方法更新

  • 2018-09-24
  • 本文字数:1066 字

    阅读完需:约 3 分钟

“默认接口方法( Default Interface Methods )”特性提案将允许 C#、F#及其他.NET 语言实现有限形式的多继承。受Java 的默认方法启发,库作者将可以向已发布的接口中添加新方法而不破坏向后兼容性,其中也包括默认实现。

对于这个人们热议的特性,争论双方都固执己见。在这一点上,什么 都没变。最新消息是,这可能只是一个.NET Core 特性。

在讨论“ F#中的默认接口方法”提案时,来自微软的 Phillip Carter 写道:

我得说一下,默认接口方法确实为我们提供了一个.NET 运行时支持的方式,用于支持#243(在某种程度上)。不过,这项修改仅限于.NET Core,因为修改桌面 CLR 支持底层运行时特性的可能性微乎其微。因此,就像 C#一样,F#也将会有一个只有在你使用了 CoreCLR 是才有效的特性。

[…]

默认接口方法需要修改运行时。这也意味着需要进行检查,看看特定的运行时是否支持这个特性: https://github.com/dotnet/csharplang/blob/master/proposals/default-interface-methods.md#clr-support-api

已推出的.NET Framework 版本现在还没有支持这个特性的,它们将来提供支持的可能性也微乎其微,因为那会有破坏现在广泛存在的已有应用的风险。.NET Core 最终将在其运行时中包含这个特性,但是,现在还没有完全确定,它是否也会包含在.NET Framework、mono 或 UWP 运行时的某个未来版本中。正如 @jnm2 提到的那样,除非每一种支持.NET Standard 的运行时都包含这个特性,否则你就无法在.NET Standard 中使用它们。它也不在即将到来的.NET Standard 2.1 的计划中。

我考虑的是,从长远规划的角度看,我们所能做的不仅仅是在面对这样一种结构时保持冷静。这个特性是从 C#复制的?恐怕不是。一个成熟的 traits/typeclasses 系统?那需要花时间进行恰当的设计。它如何与已有的东西如 SRTP 合理共存?对于现在的接口、将来的接口、函数即接口、常规的泛型、SRTP 及其他东西,该如何考虑?但至少,在我看来,实现某种东西的机制即将到来,因此,在一个比较高的层面上考虑下还是有好处的,那是什么东西,它会有哪种行为,它如何与这方面的现有特性合理共存。

C#提案话题中,Joseph Musser 做出了以下回应:

作为库作者,这意味着,如果其中一个库的目标不是.NET Framework 或者在.NET Framework 上运行的一个.NET Standard 版本,那么 DIM 在现如今这种情况下就无助于 API 的演化。添加一个接口方法仍然是一项破坏性修改。

对此,Thomas Levesque 补充说,“对于该特性而言,由于库是最重要的使用场景,那会使得整个特性几乎没用……”

查看英文原文: Update on C# and F#’s Default Interface Methods

2018-09-24 11:271457
用户头像

发布了 1008 篇内容, 共 389.9 次阅读, 收获喜欢 344 次。

关注

评论

发布
暂无评论
发现更多内容

【Meetup回顾第1期】竟是这样的国产数据库,YashanDB技术内幕曝光

YashanDB

实力领先!华为云让网站更安全

科技怪授

更好地解决企业网络安全防护难题,华为云值得信赖

科技怪授

华为云网站安全解决方案,助力游戏行业平台安全

科技怪授

华为云数据灾备,让企业上云更安心

科技怪授

基于Laravel的模块化开发框架,让Web应用程序开发更快更简单

ModStart

Mysql分页 vs Oracle分页|非常详细,建议收藏

bug菌

MySQL oracle 三周年连更

谈一谈 SAP 企业管理软件里那些真假 Fiori 应用

汪子熙

SAP Fiori 企业管理软件 思爱普 三周年连更

华为云等保安全服务,助力企业多快好省过等保

秃头也爱科技

未来技术方向——“乐高式”可组装式开发能力

鲸品堂

技术 科技 组装式创新 企业号 4 月 PK 榜

袋鼠云春季生长大会最新议程来啦!4月20日我们云上见

袋鼠云数栈

大数据 数字化转型

升级企业数智化底座,以技术重构企业发展力

用友BIP

技术大会 用友iuap 用友BIP 用友技术大会

华为云等保安全解决方案,为你守护网络安全

秃头也爱科技

全面拥抱Serverless,腾讯云大数据Elasticsearch开启云原生新范式

科技热闻

数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年3月刊

墨天轮

MySQL 数据库 oracle postgresql 国产数据库

听说谛听闹退休?感知网络接班啦!

白洞计划

感知网络

架构训练营模块九作业

gigifrog

架构训练营

selenium源码通读·6 |webdriver/common/alert.py-Alert类分析

Python 源码 自动化测试 selenium

用低代码平台可视化设计表单

力软低代码开发平台

智慧公厕是什么?智慧公厕在智慧城市中起到什么样的作用?@光明源智慧公厕科技

光明源智慧厕所

智慧城市

集简云软件连接器,实现业务流程自动化

集简云开放平台

低代码开发 低代码平台 数据集成平台

崖山科技通过CMMI3级认证,研发管理能力获国际权威认可!

YashanDB

Postman 如何传递 Date 类型参数

Liam

Java 程序员 后端 Postman

京东技术专家首推:Spring微服务架构设计,GitHub星标128K

程序知音

Java 微服务 springboot SpringCloud java架构

华为云网站安全解决方案加固企业网站安全防护

科技怪授

HTTP 与 RPC 接口区别

Apifox

网络协议 RPC HTTP RPC调用

2023 Java面试题短期突击攻略,已帮助400+位程序员成功拿到offer

小小怪下士

Java 程序员 面试 后端

五一临近,赋能乡村振兴,低代码也有话讲!

加入高科技仿生人

低代码 数字化 乡村振兴 乡村旅游

极客高赞:网络安全为什么缺人?缺什么样的人?

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

如何在 Go 中验证一个字符串是否是 URL?

宇宙之一粟

正则表达式 字符串 url Go 语言 三周年连更

C#和F#默认接口方法更新_.NET_Jonathan Allen_InfoQ精选文章