写点什么

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

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

关注

评论

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

PV与UV你的网站也可以

北漂码农有话说

Self-Compassion,对自己好一点

霍太稳@极客邦科技

创业 个人成长 自我管理 创业心态

BSN北京市区块链主干网正式发布

CECBC

web压力性能测试

周冬辉

压力测试

前浪出新招,996已过时,互联网员工都开始住公司了!(爆公司信息)

程序员生活志

加班 996 007 互联网公司

第7周总结:性能

慵秋

Kubernetes的拐点助推器:左手开源,右手边缘计算

华为云开发者联盟

Kubernetes 容器 边缘计算 华为云

为什么我们要自主开发一个稳定可靠的容器网络

BoCloud博云

云计算 容器 PaaS fabric

Django Models随机获取指定数量数据方法

BigYoung

django 数据 random 随机 Models

Java如何调用Python(二)

wjchenge

Java如何调用Python(一)

wjchenge

漫画:如何证明sleep不释放锁,而wait释放锁?

王磊

Java Wait Sleep

百度大脑OCR技术助力钢铁物流实现智能管理

百度大脑

人工智能 百度大脑 文字识别

【数据结构】Java 常用集合类 ConcurrentHashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构 并发编程

超详细讲解网络中的数据链路层~

程序员的时光

程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则

图南日晟

nginx 架构设计 环境安装

web 性能压测工具

Z冰红茶

原生Ingress灰度发布能力不够?我们是这么干的

BoCloud博云

云计算 容器 云原生 PaaS

进击的 Flink:网易云音乐实时数仓建设实践

Apache Flink

flink

创业使人成长系列 (4)- 常用账号申请

石云升

支付宝 微信商户 商标

数字货币并不能完美诠释区块链金融

CECBC

区块链技术 社会价值 打通数据孤岛 重建产业信用

【数据结构】Java 常用集合类 HashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构

Netty-物联网设备Channel管理

凸出

Java Netty ConcurrentHashMap 物联网 channel

架构感悟 7- 性能优化何为

旭东(Frank)

随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

chenzt

为啥Underlay才是容器网络的最佳落地选择

BoCloud博云

云计算 容器

BIGO海量小文件存储实践

InfoQ_3597a20b53cc

创新监管首批8个试点应用公示 其中7个涉及区块链

CECBC

挑战10的1,143,913次方种算法组合:这都不是事儿!

华为云开发者联盟

华为 算法 进化 华为云

关于数据库索引的知识点,你所需要了解的都在这儿了

鄙人薛某

MySQL 索引结构 索引 MySQL优化

API网关——Kong实践分享

BoCloud博云

云计算 容器 PaaS API

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