写点什么

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

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

关注

评论

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

39 个 Java 集合框架面试题

逆锋起笔

java面试 死磕 Java 基础 3月月更 Java集合框架

知识管理的成功案例大赏

小炮

产品帮助中心的制作方法及工具推荐

小炮

优雅的DO,VO,DTO转换工具MapStruct

卢永德

3月月更

Go学习笔记——条件判断if

为自己带盐

Go 学习笔记 3月月更

电商秒杀系统架构设计文档

皓月

「架构实战营」

毕业总结

whoami

架构训练营

理解Restful风格

蜜糖的代码注释

RESTful 接口规范 REST API 3月月更

java培训:Redis和Mysql数据怎么保持一致

@零度

MySQL redis JAVA开发

虎符交易所完成2月HOO回购 HOO单月涨幅高达40%

区块链前沿News

Hoo 虎符交易所 平台币

URL重定向及跳转漏洞

喀拉峻

网络安全

毕业总结

皓月

「架构实战营」

实用机器学习笔记二十四:模型调参

打工人!

学习笔记 机器学习算法 3月月更 模型调参

科技创新力强,旺链科技创始人刘涛荣登G60科创走廊创业榜单

旺链科技

区块链 产业区块链 创新创业

尚硅谷Maven新版视频教程发布

@零度

maven

豆瓣9.6分,Scala编程圣经第5版重磅来袭!

博文视点Broadview

华为SmartCare和AUTIN品牌升级:助力运营商走出5G发展迷宫

白洞计划

程序员硬核测评:全方位测评 GaussDB(for Redis) 和开源 Redis

华为云数据库小助手

性能分析 GaussDB GaussDB ( for Redis ) 华为云数据库 开源Redis

AHPA:开启 Kubernetes 弹性预测之门

阿里巴巴云原生

阿里云 Kubernetes 云原生 AHPA 弹性预测

Linux中如何使用Htop监控工具?【网络安全】

H

Linux 网络安全

用 vite 2 平滑升级 vue 2 + webpack 项目实战

CRMEB

Go实现并发聚合,批量提交功能

人生如梦

Go 并发 请求聚合

Python 获取字典中的第一个键

AlwaysBeta

Python 程序员 编程语言 字典

操作系统面试总结

yuexin_tech

操作系统

重点操作之上线、恢复、部署 - 大屏云极简使用手册

shulinwu

Java 8 Stream 从入门到进阶——像SQL一样玩转集合

Geek_rze78a

Java JAVA stream

程序设计优化之管道数据流

有道技术团队

DNA to Face,会是寻人缉凶的一颗“银弹”吗?

脑极体

信息安全无小事!教你如何做日志脱敏

卢永德

CNI 这么多,怎么选?| 容器网络系列第1期

BoCloud博云

Kubernetes 容器云 cni 容器网络平台

AI算力加速之道

安第斯智能云

人工智能 深度学习 异构计算

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