QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

LeetCode题解:剑指 Offer 40. 最小的k个数,二叉堆,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

咨询师的诱惑

escray

程序员 面试 面经

看完这篇,保证让你真正明白:分布式系统的CAP理论、CAP如何三选二

四猿外

架构 分布式系统 CAP CAP原理 CAP理论

ONES 年终报告 | 功能升级123次,服务超100万客户

万事ONES

研发管理工具 年终报告

用138个案例讲明白了Spring全家桶+Docker+MQ

996小迁

Docker 架构 面试 RabbitMQ Spring全家桶

专业基础篇

紫枫

京东城市时空数据引擎JUST亮相中国数据库技术大会(附PPT链接)

京东科技开发者

数据库 nosql

【得物技术】交易轨迹系统

得物技术

数据 交易 得物 得物技术 自定义

七大步骤,详解预置算法构建模型的全过程

华为云开发者联盟

架构 算法 数据

【华为云专家原创】 服务注册与发现如何满足服务治理?

华为云开发者联盟

分布式 服务 注册

Bitmap 续篇-基于 Bitmap 瞅瞅不一样的 Percentile

GrowingIO技术专栏

BitMap

接口测试-使用mock生产随机数据

测试人生路

接口测试

完美!这份世界顶级架构师编写的550页Spring5高级编程

Java架构之路

Java 程序员 架构 面试 编程语言

盘点 2020 | 数据里有你、我、他,关键还是自己

李孟聊AI

大数据 数据中台 感悟 盘点2020

博睿数据支持腾讯云函数监控,Serverless时代已来临

博睿数据

Serverless APM 监控

架构设计大作业1

仲夏

京东将上线社区团购“京喜拼拼”:社区团购是否是一次泡沫大战

石头IT视角

数字资产钱包系统开发及介绍

2020H1中国AI云服务市场规模增长远超预期;C++20 标准正式发布

京东科技开发者

云计算 AI IoT

测开之函数进阶· 第5篇《偏函数》

清菡软件测试

测试开发

由两个问题引发的对GaussDB(DWS)负载均衡的思考

华为云开发者联盟

数据库 数据 负载

小黄人提前回归?实力与萌力双出动

DT极客

手把手带你入门加密算法的Python实现

华为云开发者联盟

Python 算法 加密

太平金科助力“开局之战”顺利启动,博睿数据“A+N”一体化解决方案全力护航

博睿数据

APM npm AIOPS

互联网寒冬下,程序员如何化解危机?答案全在这份阿里Java知识地图里

比伯

Java 编程 程序员 面试 计算机

大数据ETL批量调度,这几款工具都需要去掌握了解

敏捷调度TASKCTL

大数据 kettle 运维自动化 海豚调度 ETL算法

花火交易所APP开发|花火交易所软件系统开发

系统开发

年前成功拿下35K+16薪美团Java架构师Offer!考点、面试题分享送给明年金三银四的你

Java架构追梦

Java 架构 面试 美团 offer

网易有道 iOS二面经验分享

iOSer

ios 面试 网易

从阿里P5到P8=入门到内核?看看这份对标80W+年薪的Java进阶路线图

Java架构之路

Java 程序员 架构 面试 编程语言

GitHub上1.3W Stars国内第一的项目实战PDF

Java架构之路

Java 程序员 架构 面试 编程语言

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