“默认接口方法(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

C#和F#默认接口方法更新相关推荐

  1. C# 默认接口方法更新完成,很多细节问题尚待解决

    随着对默认接口方法的支持越来越接近完成,一些潜在的问题被提了出来.虽然已经完成了很多工作,但这是一个复杂的特性,许多细节问题还没有解决.但首先,这里有一些已解决的问题. 接口允许使用 static 和 ...

  2. 如何在 C# 8 中使用默认接口方法

    C# 8 中新增了一个非常有趣的特性,叫做 默认接口方法 (又称虚拟扩展方法),这篇文章将会讨论 C# 8 中的默认接口方法以及如何使用. 在 C# 8 之前,接口不能包含方法定义,只能在接口中定义方 ...

  3. C# 8中的默认接口方法

    \ 关键要点 \\ 默认接口方法已经被包含在C# 8的新功能建议中,开发人员可以像使用trait那样使用默认方法.\\t trait是面向对象的编程技术,用于提升不相关类之间方法的重用性.\\t C# ...

  4. C# 8: 默认接口方法

    翻译自 John Demetriou 2018年8月4日 的文章 <C# 8: Default Interface Methods>[1] C# 8 之前 今天我们来聊一聊默认接口方法.听 ...

  5. C# 8.0 的默认接口方法

    例子 直接看例子 有这样一个接口: 然后有三个它的实现类: 然后在main方法里面调用: 截至目前,程序都可以成功的编译和运行. IPerson接口变更 突然,我想对所有的人类添加一个新的特性,例如, ...

  6. Java22-day13【Lambda表达式(标准格式、练习、注意事项)、接口组成更新(默认-静态-私有方法)、方法引用(构造器)】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  7. 【JavaSE】Lambda表达式、接口组成更新、方法引用

    文章目录 1. Lambda表达式 1.1 Lambda表达式初体验 1.2 Lambda表达式的基本格式 1.3 Lambda表达式练习 1.4 Lambda表达式的省略规则 1.5 Lambda表 ...

  8. 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口

    文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...

  9. JavaSE学习18(接口组成更新,方法引用)

    接口组成更新 1.1 接口组成更新概述 接口的组成常量: public static final 可省略抽象方法: public abstract 可省略 java8之后 加入了默认方法:静态方法: ...

最新文章

  1. 会议重点介绍芯片设计中的人工智能
  2. libev源码解析——总览
  3. 李永乐线性代数手写笔记-特征值和特征向量
  4. Spring 3.1缓存和配置
  5. leetcode 45. 跳跃游戏 II 思考分析
  6. mysql 索引空间大小_查看数据库表中容量大小,表有多少记录,占多少空间以及索引的大小,以及未使用空间...
  7. python 常量 模块_Python字符串模块的有用常量
  8. QML笔记-键盘事件中同时响应onDigitXXPressed与onPressed
  9. Spark的这些事lt;二gt;——几个概念
  10. 自学篇之----html的所有input标签 以及post和get提交之间的区别
  11. python 安装setuptools时报Compression requires the (missing) zlib module错误的解决方案
  12. 小程序代码压缩之js压缩
  13. 软件测试中动态测试与静态测试的区别
  14. vscode如何更换主题
  15. web常见的屏幕尺寸
  16. the little schemer 笔记(8)
  17. linux 目录防篡改,Linux下的防篡改技巧
  18. 行业寒冬下,简历发了几千次已读不回,功能测试的出路在哪里?
  19. 环保数采仪在加油站油气回收中的应用
  20. 绩效考核-项目经理绩效考核指标

热门文章

  1. 领跑交互新时代 蓦然认知助力传统产业智能化升级
  2. 牛逼,国产开源的远程桌面火了,只有9MB,支持自建中继器!
  3. 服务端如何防止订单重复支付!
  4. Java基于Swing和Netty仿QQ界面聊天小项目
  5. 监控神器Prometheus用不对,也就是把新手村的剑
  6. SpringBoot 2.3 新特性之优雅停机,这波操作太秀了!
  7. 一次 Jar 包升级引发的血案 amp; 解决
  8. 论机器学习领域的内卷
  9. 如何高效入门 PyTorch ?
  10. 【一周算法实践集训】_【模型构建】_baseline