2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

深入理解CAS:以AtomicInteger为例

itlemon

Atomic CAS AtomicInteger 自旋

Spring Boot 最流行的 16 条实践解读,值得收藏!

Java小咖秀

spring 学习 Spring Boot SpringBoot 2 经验分享

功利学习法:我为什么要这么功利?

非著名程序员

学习 程序员 程序人生 提升认知

Atlassian Team Playbook | OKR 好的不只是逼格

Atlassian

开发

想怎么玩,就怎么玩!搭载桌面级十代酷睿的神舟超级战神真香!

最新动态

编程能力 —— TicTacToe(井字棋)

wendraw

Java 大前端 编程能力

环信即时通讯云荣获《2020年度云通讯产品创新奖》

DT极客

小师妹学JVM之:Dirty cards和PLAB

程序那些事

Java JVM 小师妹 性能调优 签约计划第二季

[架构师训练营] Week02 - 作业

谭方敏

week5 coding

GAC·DU

你真的在做持续集成吗?

冯文辉

DevOps 持续集成 CI/CD

[架构师训练营] Week02 - 学习总结

谭方敏

猿灯塔:spring Boot Starter开发及源码刨析(一)

猿灯塔

Java 源码剖析

第五周学习总结

一篇文章深入理解JDK7 HashMap

itlemon

hashmap map 源码解析 哈希冲突

可读代码编写炸鸡四(下篇) - 提炼注释的下一步是提炼注释

多选参数

代码质量 代码 代码组织 代码规范

一篇文章深入理解JDK8 HashMap

itlemon

源码 hashmap 线程安全

架构师训练营第5周总结

aoeiuvzcs

创业使人成长系列 (1)- 从失败中学习

石云升

创业 个人成长 成长

第五周作业

我终于弄懂了Python的装饰器(一)

BigYoung

Python 装饰器

架构师训练营总结 -5

River Tree

极客大学架构师训练营 个人总结

week5 总结

GAC·DU

一致性Hash算法

莫莫大人

极客大学架构师训练营

小姐姐面试蚂蚁金服被虐经历,哪吒心疼.

通天哪吒

面试

再谈任务分解

松花皮蛋me

Java 精益开发

推荐 10个 NB的 IDEA 插件,开发效率至少提升一倍

程序员小富

Java 效率 IDEA

如何写一份合格的技术简历?

通天哪吒

面试

架构师训练营第5周作业

aoeiuvzcs

直接赋值,深拷贝和浅拷贝

Leetao

Python Python基础知识

Homework-我的一致性Hash算法

River Tree

Homework

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