例子

直接看例子

有这样一个接口:

然后有三个它的实现类:

然后在main方法里面调用:

截至目前,程序都可以成功的编译和运行。

IPerson接口变更

突然,我想对所有的人类添加一个新的特性,例如,添加一个自我介绍的方法,所以我在IPerson里添加了Introduce()这个方法:

现在再次Build一下项目,肯定会失败的:

因为这个方法在三个实现类里面都没有实现。

使用默认的实现来更新接口

如果在C# 8.0以前,我们肯定需要把三个实现类都实现一下这个Introduce() 方法。而在C# 8.0里,我们可以在IPerson接口里做一个默认的方法实现:

再次Build之后,您会发现就没有错误了:

而且我们也可以在所有的实现类上正常的调用这个方法:

我没有设置任何属性,但是结果是没问题的。

但是,不可以直接在实现类上调用该方法,例如这样写就会报错:

这是因为Teacher这个实现类并没有定义Introduce()这个方法。

在前面的例子的里,我是通过IPerson接口调用的这个方法,这是没有问题的,因为IPerson这个接口定义了这个方法。

接口的静态成员

上面例子的输出是这样的:

而我想让输出有默认的名字和年龄,在C# 8.0里面,我们可以这样做,添加静态字段(field)和静态方法:

实际上这个不会报错的,出现红色波浪线的原因可能是因为我的Resharper和VS没有升级,Build会成功的。

这里面我做的有点“脱裤子放屁”,但我仅仅是为了展示语言的新特性。

然后在调用的时候,我们可以在IPerson接口上先设置默认值:

然后运行:

可以看到,由于各个实现类都没有自己的实现,所以都输出了默认值。

在类上实现接口方法

在Teacher类上实现Introduce()这个方法:

然后就可以调用Teacher上的Introduce()方法了:

运行程序:

可以看到无论是通过Teacher类的实例还是通过IPerson接口,最终调用的都是Teacher类实现的Introduce()方法。

详细介绍请点击原文链接。

C# 8.0 的默认接口方法相关推荐

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

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

  2. C#和F#默认接口方法更新

    "默认接口方法(Default Interface Methods)"特性提案将允许C#.F#及其他.NET语言实现有限形式的多继承.受Java的默认方法启发,库作者将可以向已发布 ...

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

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

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

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

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

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

  6. C# 8.0 默认接口实现

    C# 8.0 默认接口实现 Intro C# 8.0 开始引入了默认接口实现,也就是可以在接口里写方法实现. 在之前的版本中接口上是没有办法定义实现的,方法也都是 public 的,除了接口和属性之外 ...

  7. [译]C#8.0中一个使接口更加灵活的新特性-默认接口实现

    9月份的时候,微软宣布正式发布C#8.0,作为.NET Core 3.0发行版的一部分.C#8.0的新特性之一就是默认接口实现.在本文中,我们将一起来聊聊默认接口实现. 众所周知,对现有应用程序的接口 ...

  8. C# 8.0 中开启默认接口实现

    当你升级到 C# 8.0 和 .NET Core 3.0 之后,你就可以开始使用默认接口实现的功能了. 从现在开始,你可以在接口里面添加一些默认实现的成员,避免在接口中添加成员导致大量对此接口的实现崩 ...

  9. 30分钟入门Java8之默认方法和静态接口方法

    2019独角兽企业重金招聘Python工程师标准>>> 30分钟入门Java8之默认方法和静态接口方法 作者:@JohnTsai 本文为作者原创,转载请注明出处:http://www ...

最新文章

  1. 不改一行代码定位线上性能问题
  2. 网易云信全面技术支持,让“子弹短信”飞得更快
  3. 三十八、Vue项目上手 | 用户管理系统(上篇)
  4. Python字符串讲解举例—工资字符串
  5. C语言编译和链接详解(通俗易懂,深入本质)
  6. 追求极致速度,极简多模态预训练模型ViLT,推理速度比UNITER快60倍!(ICML2021)...
  7. SilverLight中的数据绑定
  8. 火狐浏览器59.0.1英文版如何改为中文版界面
  9. 全球最大手机公司又发年度新品:AI亮得一笔,智能音箱又晚又丑
  10. 接口做的好怎么形容_大连SIEMENS西门子M174接口plc模块
  11. 深度学习笔记(二)——VGG
  12. 柱状图如何叠加折线图_一样的次坐标轴不一样的柱状图
  13. 父亲儿子计算机语言,c语言之父_C语言编程,父亲30岁。儿子6岁,问多少年后父亲的岁数是儿子的2倍...
  14. 标段模板、审批流程模板
  15. 计算机无法安装VC2015,win10 vc++2015一个或多个问题导致了安装失败如何处理
  16. UE4 C++无法打开包括文件 C1083
  17. linux 百度网盘 限速,哈哈,我终于找到解除百度网盘账号限速的方法了,可是........
  18. LGTM : code review 行话
  19. python监控网站更新_Python 通过网站search功能监控网站内容更新
  20. 面试笔试整理3:深度学习机器学习面试问题准备(必会)

热门文章

  1. objective-c中的static
  2. ORACLE备份中的压缩
  3. 什么是Microsoft Teams的App Studio
  4. 超链接禁用_在Microsoft Word 2003和2007中禁用自动超链接
  5. 设备无法获得谷歌运行怎么办_因此,您刚刚获得了Google主页。 怎么办?
  6. java cas volatile_每日一个知识点:Volatile 和 CAS 的弊端之总线风暴
  7. 垂直居中及容器内图片垂直居中的CSS解决方法
  8. 应用环境下的TIME_WAIT和CLOSE_WAIT
  9. Centos6.5使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践
  10. IIS服务器上增加mp4格式MIME 类型映射设置具体步骤