写点什么

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:271810
用户头像

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

关注

评论

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

从月薪10K不到,到面进阿里拿40K+offer,java类加载器原理

Java 程序员 后端

从腾讯T3-3大佬手上获得的Java架构进阶PDF文档,图文并茂,真香

Java 程序员 后端

你可以 CRUD,但你不是 CRUD 程序员!,java制作网站教程

Java 程序员 后端

pygame 核心但简单的知识点,坐标系、Surface 对象、颜色与 Color 对象、Rect 对象

梦想橡皮擦

11月日更

你说这是冷知识?Netty时间轮调度算法原理分析,再不了解你就out啦(1)

Java 程序员 后端

从国企到互联网,程序员六年四段经历,一份被很多 HR 刷掉的简历

Java 程序员 后端

从源码的角度搞懂Java代理模式,那些面试中你最容易忽略的细节

Java 程序员 后端

传授一套月薪20k程序员的高薪秘籍,java语言程序设计第十版答案百度云

Java 程序员 后端

从一道 LRU 算法题说到缓存淘汰策略,Java常用面试集合

Java 程序员 后端

代码简洁之道--笔记,netty架构原理图

Java 程序员 后端

优化Elasticsearch 每个索引应该有多少个分片?

Java 程序员 后端

你可能该来学习Hystrix RPC保护的原理,RPC保护之熔断器模式了

Java 程序员 后端

从月薪 1000 到 2W+,文科生如何逆袭成为大厂程序员

Java 程序员 后端

云小课 | 使用ROMA API,API管理从此不用愁!

华为云开发者联盟

API 华为云 ROMA API全生命周期管理 ROMA API

作为java程序员,在金三银四季你遇到过哪些质量很高的java面试?

Java 程序员 后端

你不知道的redis九-大厂面试必备redis面试题

Java 程序员 后端

你真的懂Unicode编码吗?,理解spring原理哪本书好

Java 程序员 后端

从外卖员到程序员,自学3年终于转行成功,三面

Java 程序员 后端

你看得起劲的斗鱼直播,已经在 GitHub 开源了自家项目!

Java 程序员 后端

使用 Mybatis 真心不要偷懒!,kafka大数据架构

Java 程序员 后端

从JVM锁到Redis分布式锁,对小白十分友好,java最新技术栈百度网盘

Java 程序员 后端

高并发场景下JVM调优实践之路

vivo互联网技术

性能优化 后端 JVM Java、

你知道面试必问的AOP吗?通过Spring又如何实现呢?

Java 程序员 后端

大数据集群被窃取数据怎么办?透明加密可以一试

华为云开发者联盟

大数据 安全 数据安全 FusionInsight MRS 透明加密

你知道怎么在生产环境下部署tomcat吗?,五年java开发经验面试

Java 程序员 后端

DevOps进击之后,DevSecOps又在说些什么?

飞算JavaAI开发助手

DevOps

使用Docker安装GitLab,小马哥springcloud视频

Java 程序员 后端

使用Git分布式控制系统,java岗位面试题总结

Java 程序员 后端

以前不知道字节面试难在哪,现在体验到了,被虐的很惨

Java 程序员 后端

你真的确定Spring AOP的执行顺序吗,爆赞

Java 程序员 后端

你不知道的Redis八-Redis底层数据结构解析,意外的惊喜

Java 程序员 后端

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