在C#中,正常情况下使用接口的实现使用的是 隐式接口实现

public interface IParent1
{void Medthod();
}public class Child : IParent1
{public void Medthod(){Console.WriteLine("Child 中的实现方法");}
}

C# 编译器假定Child中的Medthod的方法是对接口IParent1中Medthod方法的时候。C#编译器之所以这样做出假定,是因为Medthod方法的可访问性是public,而且接口方法的签名和新引入的方法完全一致。也就是说两个方法具有相同的参数和返回类型。如果新的Test方法被标记为virtual,C#编译器仍会认为该方法匹配与接口方法。

C# 会将新方法的实现和接口的实现认为是同一种实现。

static void Main(string[] args)
{Child child = new Child();child.Medthod();IParent1 test1 = child;test1.Medthod();Console.ReadKey();
}

因为方法的实现和接口的实现被认定为同一种方法,那输出的结果就是一样的。

将定义那个接口名称作为方法名的前缀,例如上面的IParent1.Medthod()。创建的就是一个 显式接口方法实现(Explicit Interface Method Implementation ,EIMI)。注意,在C#中定义一个显式接口方法时,不允许指定可访问性(public或者private等)。否则编译器汇报错误,例如下图。

显式接口的实现类默认是private,防止其他类直接使用实例中的方法,只能通过接口来调用。EIMI的方法也不能标记为virtual,所以他不能重写。这是因为EIMI方法并非真的是类型对象模型的一部分,它是将一个接口(一组行为或者方法)连接到一个类型上,同时避免公开行为/方法的一种方式。所以使用类对象也不能点出改方法。

接口类在调用方法时,使用的也是显式实现中的实现。

static void Main(string[] args)
{Child child = new Child();child.Medthod();IParent1 test1 = child;test1.Medthod();Console.ReadKey();
}public interface IParent1
{void Medthod();
}public class Child : IParent1
{public void Medthod(){Console.WriteLine("Child 中的实现方法");}void IParent1.Medthod(){Console.WriteLine("显式实现的IParent的方法");}
}

输出的结果:

参考博客:https://blog.csdn.net/u010533180/article/details/72954192

转载于:https://www.cnblogs.com/gp112/p/10744757.html

C#中的 隐式与显式接口实现相关推荐

  1. java 范型 隐式 显式_隐式与显式接口实现

    用外行的话来说,如果一个类继承自2个或更多接口,并且这些接口碰巧具有相同的方法名,则如果您使用隐式接口实现,则该类将不知道正在实现哪种接口方法.这是您显式实现接口时的场景之一. 隐式接口实现 publ ...

  2. 直播预告 | 斯坦福助理教授马腾宇:深度学习中的隐式和显式正则化

    人工智能作为科技领域最具代表性的技术,日益成为国际竞争的新焦点.当下,我国正逐步开展全民智能教育普及,设置人工智能相关课程,致力于建设人工智能的人才高地. 在此背景下,中关村海华信息技术前沿研究院立足 ...

  3. C语言中的隐式声明是什么,有什么危害?warning: implicit declaration of function ‘xxx’

    今天编译一个代码,提示CUSTOM_LAYER里面有一个C文件函数gettimeofday()隐式声明,用man手册查了一下,需要包含头文件#include <sys/time.h> 那么 ...

  4. scala中的隐式转换、隐式参数和隐式类

    scala中的隐式转换.隐式参数和隐式类 @(SCALA)[scala] scala中的隐式转换隐式参数和隐式类 一隐式转换 1示例 2隐式转换的条件 二隐式参数 1示例 三隐式类 1示例 隐式转换是 ...

  5. .NET 6 中的隐式命名空间引用

    .NET 6 中的隐式命名空间引用 Intro 之前写过一篇隐式命名空间引用的大概介绍,在一些小的测试项目中也有在用,一直没作为示例给大家分享,主要原因在于之前看到了一个关于隐式命名空间引用的 Git ...

  6. 如何在 C# 中使用隐式和显式操作符

    C# 有一个鲜为人知的特性是通过定义 显式和隐式操作符 实现类型之间的转换,这篇文章我们将会讨论如何使用这些 显式 和 隐式 操作符. 什么是显式,什么是隐式 隐式类型转换 它是运行时自动帮你完成的, ...

  7. sql隐式转换_SQL Server中的隐式转换

    sql隐式转换 This article will provide an overview of SQL Server implicit conversion including data type ...

  8. java显示参数,Java中的隐式参数和显示参数实例详解

    在学习java的过程中,我们会遇到许多的问题.下面我们就来看看什么是隐式参数和显示参数. 显式参数,就是平时见到的在方法名括号中间的参数,就是所谓能看得见的参数www.cppcns.com. 隐式参数 ...

  9. Selenium中的隐式等待和显式等待

    在Selenium中,"等待"在执行测试中起着重要作用.在本文中,您将学习Selenium中"隐式"和"显式"等待的各个方面. 在本文中,您 ...

最新文章

  1. restorecon
  2. SimpleDateFormat-时间格式化中的大小写字符
  3. freemarker常见语法大全,灰常有用!
  4. Java EE——Mybatis 框架学习
  5. ios15使用纯代码计算cell的高度
  6. .NET6之MiniAPI(十八):OpenAPI swagger
  7. WordPress疑难问题以及解决方案汇总
  8. linux下测试权限,Linux下进程权限分析
  9. word文档小方格怎么弄_word文档小方格怎么打勾
  10. “中国开发者大调查”问卷收集即将结束,快来看这次中奖“末班车”你赶上了吗?
  11. 集群之间数据拷贝distcp性能的调优
  12. python解析xml数据_Python解析XML数据方法
  13. 备份outlook的时候,请不要忘记同时备份Outlook.NK2文件
  14. mongodb 分组聚合_MongoDB 临时表横空出现 1 万+,这条语句执行前请准备好翻车的姿势...
  15. 如何建立风险分析模型
  16. android星星闪效果,使用Canvas绘制星星闪烁的效果
  17. 日立6TB充氦硬盘详细规格、实物照片
  18. 聚观早报|苹果默认不再接受隔空投送;Mete被裁员工将获薪水补偿
  19. OFD文件转PDF怎么转换?教你一键转换方法
  20. 发布新一代微控制器 AURIX 2G 的背后,半导体巨头英飞凌如何应对汽车行业变革?...

热门文章

  1. python如何模拟键盘输入_python实现键盘输入的实操方法
  2. 每天一道LeetCode-----将数字用字母表示(本质是26进制转换)
  3. python包接口,Typetalk聊天API的python接口包
  4. vue切换路由页面数据缓存_Vue-Router实现前端页面缓存
  5. obfuscator-llvm Theos 集成配置
  6. s3c2440启动文件详细分析
  7. 智能指针shared_ptr
  8. C++三五法则,看看你能不能理解(推荐)
  9. GIMP 2.10教程
  10. 32位网卡驱动 2008_DPDK之网卡收包流程