写点什么

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

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

关注

评论

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

16个分论坛出品标准大揭秘,期待你的申请!

开源社

Collections-Arraylist源码解读(一)

知识浅谈

ArrayList 10月月更

【牛客刷题-算法】3-第一篇-斐波拉契数列-C实现

清风莫追

递归 数据结构与算法、 10月月更

乐观锁和悲观锁

潜水员

并发

Python基础(七) | 文件、异常以及模块详解

timerring

异常 模块 10月月更

[架构实战] 课后作业二

爱学习的麦子

数组操作の旋转二维数组

掘金安东尼

算法 10月月更

用任意类型编写代码——一文带你了解泛型编程

宇宙之一粟

Java 泛型编程 10月月更

Docker下,五分钟极速体验机器学习

程序员欣宸

Docker 10月月更

JavaScript中this指向哪儿?如何确定this?-前端面试进阶

loveX001

JavaScript

匿名网络追踪溯源机制及方法

郑州埃文科技

IP地址 追踪溯源 匿名网络

​Java进阶(三十八)快速排序

No Silver Bullet

Java 快速排序 10月月更

ESP32-C3 学习测试 蓝牙 篇(五、添加 characteristic)

矜辰所致

蓝牙 ESP32-C3 10月月更

如何打通 SAP Cloud for Customer 系统和微信公众号的双向消息通信功能

汪子熙

node.js 微信 SAP 微信平台 10月月更

Web3.0杂谈-#004(51/100)

hackstoic

NFT Web3.0

你是如何使用React高阶组件的?

beifeng1996

React

【LeetCode】在LR字符串中交换相邻字符Java题解

Albert

LeetCode 10月月更

Taurus: 面向机器学习的数据面架构

俞凡

人工智能 网络 自智网络

简述构建微服务架构的四大挑战

穿过生命散发芬芳

微服务 10月月更

​Java进阶(三十九)Java集合类的排序,查找,替换操作

No Silver Bullet

Java 排序 查找 10月月更 替换

【牛客刷题-算法】2-算法入门-栈的压入、弹出序列

清风莫追

算法 10月月更

Python基础(六) | 面向对象类定义及特性详解

timerring

实例 10月月更

大数据ELK(十):使用VSCode操作猎聘网职位搜索案例

Lansonli

ELK 10月月更

这些js原型及原型链面试题你能做对几道

loveX001

JavaScript

工赋开发者社区 | 某大型电子装备总装数字化工厂MES/MOM系统实施

工赋开发者社区

计算机网络——以太网交换机学习和转发帧

StackOverflow

编程 计算机网络 10月月更

戏说系统安全(50/100)

hackstoic

系统安全

计算机网络——集线器与交换机的区别

StackOverflow

编程 计算机网络 10月月更

工赋开发者社区 | 当PLC与见“IT”:MES/MOM标准之ISA-95基础内容介绍

工赋开发者社区

【牛客刷题-算法】NC4 判断链表中是否有环

清风莫追

算法 10月月更

Qt中读取json文件以及总结

中国好公民st

c++ qt 10月月更

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