写点什么

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

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

关注

评论

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

低代码平台中的GraphQL引擎

canonical

开源 低代码 领域驱动模型DDD 中台架构 graphql 低代码平台

低代码平台需要什么样的ORM引擎?(1)

canonical

开源 低代码 ORM 低代码平台 Spring JPA

什么是声明式编程

canonical

函数式 声明式 命令式

【保姆级教程】如何用Rust编写一个ChatGPT桌面应用 | 京东云技术团队

京东科技开发者

rust 京东云 桌面应用 企业号 5 月 PK 榜

为什么说百度AMIS框架是一个优秀的设计

canonical

开源 前端架构 低代码 低代码平台 百度AMIS

解耦远不止依赖注入

canonical

架构设计 解耦 依赖注入

低代码平台需要什么样的ORM引擎?(2)

canonical

开源 mybatis 低代码 jpa ORM

【直播回顾】AIGC产业研究报告2023图像生成篇报告解读

易观分析

产业 智能

云原生背景下如何配置 JVM 内存

Java 容器 云原生 JVM

玩转服务器之环境篇:PHP和Python环境部署指南 | 京东云技术团队

京东科技开发者

php Python 京东云 企业号 5 月 PK 榜 轻量云服务器

Wallys / QCN9074/QCN9024 WIFI 6E 802.11AX 4X4 6GHz wifi module.

Cindy-wallys

BSN-DDC基础网络详解(十一):官方门户OpenAPI说明及开发资料汇总

BSN研习社

从可逆计算看Delta Oriented Programming

canonical

开源 低代码 软件产品线工程 可变性管理 可逆计算

企业应该知道的几种网络安全防护措施!

行云管家

网络安全 网络 信息

前端开发之函数式编程实践 | 京东云技术团队

京东科技开发者

JavaScript 编程 京东云 企业号 5 月 PK 榜

从可逆计算看声明式编程

canonical

开源 低代码 声明式 命令式

阿里大佬在Github分享的Spring Cloud全栈笔记,你想象不到有多全

Java 架构 微服务 Spring Cloud

华为云云原生视窗:一文回顾Q1精彩瞬间

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

性能优化多重要?凭借华为791页Mysql金字塔性能调优手册,进阿里

Java MySQL 性能优化 性能调优

你管这破玩意叫缓存穿透?还是缓存击穿?

Java 数据库 redis 缓存穿透 缓存击穿

Github上标星98K!火爆全网的性能调优实战手册,出自腾讯T4大佬

Java 性能优化 性能调优

小微企业运维用哪款软件好?有免费的吗?

行云管家

运维 安全运维 小微企业

Paxos的魔法学研究报告

canonical

paxos协议 共识算法 分布式, 分布式算法 深入理解分布式共识算法

背靠香港影视集团星光文化,StarNFT问世了

小哈区块

手把手教你用代码画架构图 | 京东云技术团队

京东科技开发者

京东云 代码实现 企业号 5 月 PK 榜 C4

Difference between from DR4019 and DR4029 /industrial wifi5 router/support openwrt.

Cindy-wallys

IPQ4019 ipq4029

程序员之间拉开差距最大的因素

博文视点Broadview

XDSL:通用的领域特定语言设计

canonical

开源 低代码 dsl 领域特定语言 领域语言工作台

如果重写SpringBoot,我们会做哪些不同的选择?

canonical

开源 低代码 架构设计 springboot spring ioc

低代码平台中的自动化测试

canonical

开源 低代码 自动化测试 自动化测试框架 低代码平台

架构师日记-从数据库发展历程到数据结构设计探析 | 京东云技术团队

京东科技开发者

数据库 京东云 企业号 5 月 PK 榜

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