C#和F#默认接口方法更新
“默认接口方法(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#默认接口方法更新相关推荐
- C# 默认接口方法更新完成,很多细节问题尚待解决
随着对默认接口方法的支持越来越接近完成,一些潜在的问题被提了出来.虽然已经完成了很多工作,但这是一个复杂的特性,许多细节问题还没有解决.但首先,这里有一些已解决的问题. 接口允许使用 static 和 ...
- 如何在 C# 8 中使用默认接口方法
C# 8 中新增了一个非常有趣的特性,叫做 默认接口方法 (又称虚拟扩展方法),这篇文章将会讨论 C# 8 中的默认接口方法以及如何使用. 在 C# 8 之前,接口不能包含方法定义,只能在接口中定义方 ...
- C# 8中的默认接口方法
\ 关键要点 \\ 默认接口方法已经被包含在C# 8的新功能建议中,开发人员可以像使用trait那样使用默认方法.\\t trait是面向对象的编程技术,用于提升不相关类之间方法的重用性.\\t C# ...
- C# 8: 默认接口方法
翻译自 John Demetriou 2018年8月4日 的文章 <C# 8: Default Interface Methods>[1] C# 8 之前 今天我们来聊一聊默认接口方法.听 ...
- C# 8.0 的默认接口方法
例子 直接看例子 有这样一个接口: 然后有三个它的实现类: 然后在main方法里面调用: 截至目前,程序都可以成功的编译和运行. IPerson接口变更 突然,我想对所有的人类添加一个新的特性,例如, ...
- Java22-day13【Lambda表达式(标准格式、练习、注意事项)、接口组成更新(默认-静态-私有方法)、方法引用(构造器)】
视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...
- 【JavaSE】Lambda表达式、接口组成更新、方法引用
文章目录 1. Lambda表达式 1.1 Lambda表达式初体验 1.2 Lambda表达式的基本格式 1.3 Lambda表达式练习 1.4 Lambda表达式的省略规则 1.5 Lambda表 ...
- 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口
文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...
- JavaSE学习18(接口组成更新,方法引用)
接口组成更新 1.1 接口组成更新概述 接口的组成常量: public static final 可省略抽象方法: public abstract 可省略 java8之后 加入了默认方法:静态方法: ...
最新文章
- 会议重点介绍芯片设计中的人工智能
- libev源码解析——总览
- 李永乐线性代数手写笔记-特征值和特征向量
- Spring 3.1缓存和配置
- leetcode 45. 跳跃游戏 II 思考分析
- mysql 索引空间大小_查看数据库表中容量大小,表有多少记录,占多少空间以及索引的大小,以及未使用空间...
- python 常量 模块_Python字符串模块的有用常量
- QML笔记-键盘事件中同时响应onDigitXXPressed与onPressed
- Spark的这些事lt;二gt;——几个概念
- 自学篇之----html的所有input标签 以及post和get提交之间的区别
- python 安装setuptools时报Compression requires the (missing) zlib module错误的解决方案
- 小程序代码压缩之js压缩
- 软件测试中动态测试与静态测试的区别
- vscode如何更换主题
- web常见的屏幕尺寸
- the little schemer 笔记(8)
- linux 目录防篡改,Linux下的防篡改技巧
- 行业寒冬下,简历发了几千次已读不回,功能测试的出路在哪里?
- 环保数采仪在加油站油气回收中的应用
- 绩效考核-项目经理绩效考核指标