写点什么

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

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

关注

评论

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

2025混合应用开发战略引擎 成本重构与效能跃迁的双轨路径

xuyinyin

汽车之家联合HarmonyOS SDK,深度构建鸿蒙生态体系

HarmonyOS SDK

HarmonyOS NEXT HarmonyOS SDK应用服务

菜鸟启用香港最大航空货运枢纽,全面覆盖RFID提速全球快递

斯科信息

菜鸟 斯科信息 RFID技术

不只是告警:用阿里云可观测 MCP 实现 AK 高效安全审计

阿里巴巴云原生

阿里云 云原生 可观测 MCP

“用友BIP 5”重磅发布,让AI在企业应用落地

人称T客

如何防护CC攻击

德迅云安全杨德俊

破解BOM管理难题:MES信息化实施中BOM管理问题​

万界星空科技

数字化 制造业 生产管理系统 BOM mes

使用Cyb3rWard0g的Sentinel To-Go快速部署Azure Sentinel——捕获Cobalt Strike攻击!

qife122

Azure Sentinel Cobalt Strike

curl Rustls后端缓冲区溢出漏洞技术分析

qife122

curl 缓冲区溢出

业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

京东科技开发者

Web网页端即时通讯源码/IM聊天源码RainbowChat-Web

JackJiang

网络编程 即时通讯 IM

看见才能管住:银行数据安全风险监测与治理

原点安全

微店商品列表API开发指南

tbapi

微店API 微店商品列表接口 微店数据采集

2025陕西正规等保测评公司名单看这里!

行云管家

网络安全 等保 等保评测

万字长文|AI智能体与模型进化:如何在企业落地中平衡创新与风险

JustYan

LLM AI Agent Agentic AI Self-Evolving

全城狂欢:南京移动5G-A让热爱不再等待

极客天地

企业如何利用 MyEMS 开源能源管理系统实现节能减排

开源能源管理系统

开源 能源管理系统

Eventlog Analyzer 怎么帮助企业满足合规性?

运维有小邓

前端开发中依赖包有问题怎么办

京东科技开发者

26届双非上岸记!快手之战~

王磊

跨境电商企业的海外舆情监测痛点与解决路径

沃观Wovision

跨境电商 沃观Wovision 舆情监测系统 海外舆情监测

电信业网络安全保障方法小探讨

行云管家

网络安全 等保

MyEMS:开源基因驱动的能源管理范式革命

开源能源管理系统

开源 能源管理系统

架构提效的矛盾和矛盾的主要方面

京东科技开发者

Flutter跨端开发范式重构:小程序与App高效组装战略

xuyinyin

超越预算,打开企业预算管理新思维

智达方通

成本管理 预算管理 预算管理信息化 成本预算管理

普通人多跳槽才是正确选择?

王中阳Go

程序员 跳槽时间点

不同阶段的出海品牌,该如何制定红人营销策略?

Wolink

海外媒体 海外推广 达人营销

AiLock勒索病毒全面解析:运作机制与防御策略

qife122

数据保护 勒索病毒

VMware订阅费暴涨300%?超融合架构如何破解企业虚拟化困局

智驱前线

vmware 超融合架构

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