系列介绍

【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。

5min+不是超过5分钟的意思,"+"是知识的增加。so,它是让您花费5分钟以下的时间来提升您的知识储备量。

正文

伴随着 .NET Core 3.0 一起发布的 C# 8 ,从发布至今已经过了快大半年了。如果您细心的话,就能发现在C# 8新增的功能中有一条:“默认接口方法” 。 半年前当我看到这一新特性的时候,我惊呆了,但是惊讶之余是更多的疑惑。因为对于接口这个东西来说,从C#发布至今的十多年里几乎一直保持它的样子,然而在C# 8之后,它有了巨大的变化。随着而来,也是各种争论的声音。

很早之前我就想写这篇文章了,但是由于各种原因一直拖延到了现在。

先让我们来回顾一下 C# 中原有的接口有什么特点:

  • 接口类似于只有抽象成员的抽象基类。 实现接口的任何类或结构都必须实现其所有成员。
  • 接口无法直接进行实例化。 其成员由实现接口的任何类或结构来实现。
  • 接口可以包含事件、索引器、方法和属性。
  • 接口不含方法的实现。
  • 一个类或结构可以实现多个接口。 一个类可以继承一个基类,还可实现一个或多个接口。

也正是基于这些特点,当我们在接口中为一个方法加上"pulic"等关键字的时候,编译器会提示我们这是一个错误的写法:

interface IRepository
{
//Compile-time error CS0106 The modifier 'public' is not valid for this item.
public void Add();
}

所以更不用谈给方法写一个实现了。这就让它和 C# 中的另外一种事物行成了鲜明的对比,是的,抽象类。不知道大家有没有在各种面试中遇到过这样的提问:“接口能有任何的访问修饰符吗?”,“接口和抽象类的区别是什么?”

曾经您可以和自然的脱口而出答案:“没有修饰符。一个可以有默认方法,一个只能申明方法…………”。 但是从现在开始:这些答案是错的了。

最新文章

  1. selenium的安装
  2. 使用delphi+intraweb进行微信开发2—intraweb以.net方式发布(以asp.net mvc4模式部署)在IIS(.net虚拟主机)上
  3. Activiti 删除key值相同的所有不同版本的流程定义
  4. 刀哥多线程GCD核心概念gcd
  5. cameralink---格式 概要清晰理解
  6. acdream 1683 村民的怪癖(KMP,经典变形)
  7. hdu 4970 Killing Monsters (思维 暴力)
  8. RUBY,玩玩~~~
  9. TOMCAT之性能跟踪入门
  10. 读书时间《JavaScript高级程序设计》四:BOM,客户端检测
  11. linux qcom LCD framwork
  12. JavaScript使用闭包实现单例模式
  13. Maven 下添加oracle11g的包 报Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0
  14. 2018.4.23-ml笔记(线性回归、梯度下降)
  15. 有道云笔记链接——JAVA面向对象的学习
  16. DataGridView更新数据到数据库
  17. django表单字段
  18. SVM的新理解
  19. 使用subprocess.Poen注意事项
  20. 排序算法之快速排序Java实现

热门文章

  1. OAuth2.0概念以及实现思路简介
  2. Java防锁屏小程序
  3. (数据科学学习手札72)用pdpipe搭建pandas数据分析流水线
  4. Jquery图片上传功能整理
  5. 讨论Java中的内部类是什么?
  6. Bonny手机APP试用体验
  7. 程序员如何才能跨过高级级别,譬如腾讯T3.1/阿里P7
  8. Linux删除文件 清除缓存
  9. 最大区间和变形 - codeforces
  10. 依赖注入之IConfiguration