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

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

关注

评论

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

MySql领域经典之作,“不敢自诩为MySql专家,岂敢错过这本神书”

Java架构之路

Java MySQL 程序员 面试 编程语言

系统架构第四周总结「架构师训练营第 1 期」

天天向善

开源监控系统open-falcon搭建笔记

卓丁

监控 监控管理平台 Open-Falcon 监控告警

创新者谈

善宝橘

创新

诺奖以上,真相未满:追捕黑洞二百年

脑极体

七千字的线性回归模型指南,建议收藏!

计算机与AI

数据挖掘 学习 线性回归

来碗小面

葱小白

美食 旅行

某Java程序员在外包公司每天读写删改几年后,发现跳不出来了

Java架构之路

Java 程序员 面试 算法 编程语言

延迟满足

时间是一个人最好的证明

延迟满足感 成功

架构师第一期作业(第四周)

Cheer

课程作业

2020国庆我花了 7 天给大家撸了一篇云南旅游攻略

程序猿石头

美食 旅行

系统架构第四周作业「架构师训练营第 1 期」

天天向善

一文搞懂PV、UV、VV、IP及其关系与计算

冰河

多线程 高并发 流量 并发流量

Java并发编程-线程基础

程序员 并发编程 java 14 架构师训练

【硬件篇之功耗测试】

良知犹存

硬件

手把手教你AspNetCore WebApi:数据验证

AI代笔

ASP.NET Core web api 数据验证

建议将区块链产业纳入国家“十四五规划”

CECBC

区块链 新基建

云服务时代,未来怎么样保障自己的核心竞争力?

boshi

个人成长 职业规划 云服务

TensorFlow安装

菜鸟小sailor 🐕

学习

《我想进大厂》之Redis夺命连环11问

艾小仙

Java redis 面试 程序语言

Redis-技术专题-Jedis实战入门

码界西柚

论软件工程师的自我修养:角色、重构与质量

华为云开发者联盟

软件 开发 工程师

阿里巴巴内部“Java成长笔记”,看完才发现自己和阿里大牛的差距真的太远了!

Java架构之路

Java 阿里巴巴 程序员 面试 编程语言

MySQL-技术专题-连接查询和子查询

码界西柚

程序员在中国是青春饭?扯!看看阿里资深架构师是怎么说的!

Java架构师迁哥

Java 程序员 面试

实用威胁建模指南(二)

亚伦碎语

敏捷 安全 系统安全架构 系统安全 威胁建模

浅析 Java 内存模型 一

朱华

Java JMM

区块链赋能医疗产业报告

CECBC

区块链 大数据 医疗

手写SpringIOC

彭阿三

spring源码 sping springioc

能够让机器狗学会灭火, ModelArts3.0让AI离我们又近一步

华为云开发者联盟

人工智能 AI 机器狗

反射API

彭阿三

反射

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