小议C#接口的隐式与显示实现
小弟不才,各位大牛嘴下留情。。。
一、对于继承类里头有相同方法时候,用接口方式去调用,会优先查走显式接口方法
例如
public interface IA
{
void Test();
} public class Class1 : IA
{ public void Test()
{
Console.WriteLine("Class1");
} void IA.Test()
{
Console.WriteLine("IA.Test");
}
}
1、接口对象调用方式
IA c1 = new Class1();
c1.Test();
则输出 IA.Test
2、直接调用方式
Class1 c1 = new Class1();
c1.Test();
则输出 Class1
3、推断方式调用 var关键字,编译器自动推断为c1为Class1对象,结果同2
var c1 = new Class1();
c1.Test();
二、多重继承又如何呢?
先看个简单例子
//在上面基础上增加多一个类
public class Class2 : Class1
{
public new void Test()
{
Console.WriteLine("Class2");
}
}
二、以下三种方式调用结果分析得知:接口对象调用方法时候,会去找接口实现接口方法,讲的有点抽象,看一下下面一个小Demo
IA c2 = new Class2();
c2.Test();
输出:IA.Test
Class2 c2 = new Class2();
c2.Test();
var c2 = new Class2();
c2.Test();
输出都是:Class2
三、再来一个比较坑爹例子分析吧
public class Class3 : Class1, IA
{
void Test()
{
Console.WriteLine("Class3");
}
}
当我们写上这段代码,编译会给我一个警告
警告 1 “ConsoleApplication1.Class3.Test()”隐藏了继承的成员“ConsoleApplication1.Class1.Test()”。如果是有意隐藏,请使用关键字 new。 E:\测试Demo代码\接口继承\ConsoleApplication1\ConsoleApplication1\Program.cs 55 14 ConsoleApplication1
从编译器给我提示来看,Test() 并没有实现接口方法
IA c3 = new Class3();
c3.Test();
Class3 c3 = new Class3();
c3.Test();
var c3 = new Class3();
c3.Test();
三种方法结果都是 :IA.Test
如果非得要实现接口方法
只能显示调用,代码改为
public class Class3 : Class1, IA
{
void IA.Test()
{
Console.WriteLine("Class3");
}
}
这样子,这个结果输出毫无疑问是 Class3
总结:接口对象调用方法时候,会去找第一实现接口方法。。。
小议C#接口的隐式与显示实现的更多相关文章
- 小议C#接口的隐式与显示实现(续)
上文连接,讲的比较模糊,而且调用起来感觉比较混乱 http://www.cnblogs.com/walleyekneel/p/3581489.html 这次改为显式接口调用,可能项目也有这个一个需求 ...
- C# 接口的隐式与显示实现
隐式实现的话实现的方法属于实现的类的,可以直接通过类的对象访问,显式实现的话方法是属于接口的,可以看成是寄托在类中实现的,访问这些方法时要先把对象转换成接口对象,然后通过接口对象调用 一般来讲显式实现 ...
- C# 接口的隐式与显示实现【转】
以前在用到接口时,从来没注意到接口分为隐式实现与显示实现.昨天在浏览博客时看到相关内容,现在根据自己的理解记录一下,方便日后碰到的时候温习温习.通俗的来讲,“显示接口实现”就是使用接口名称作为方法名的 ...
- C# 接口的隐式与显示实现及适应场景
通俗的来讲,“显示接口实现”就是使用接口名称作为方法名的前缀;而传统的实现方式称之为:“隐式接口实现”.废话不说,例子如下: interface IAnimal { void Dog(); } cla ...
- C# 接口的隐式与显示实现说明
以前在用到接口时,从来没注意到接口分为隐式实现与显示实现.昨天在浏览博客时看到相关内容,现在根据自己的理解记录一下,方便日后碰到的时候温习温习. 通俗的来讲,"显示接口实现"就是使 ...
- C# 使用隐式或显示实现接口的区别
通俗的来讲,"显示接口实现"就是使用接口名称作为方法名的前缀;而传统的实现方式称之为:"隐式接口实现".费话不说,例子如下: interface IA ...
- 转】C#接口-显式接口和隐式接口的实现
[转]C#接口-显式接口和隐式接口的实现 C#中对于接口的实现方式有隐式接口和显式接口两种: 类和接口都能调用到,事实上这就是“隐式接口实现”. 那么“显示接口实现”是神马模样呢? interface ...
- C# interface 的隐式与显示实现及适应范围源码演示
把代码过程中经常用到的一些代码段做个记录,如下的资料是关于C# interface 的隐式与显示实现及适应范围演示的代码. interface IAnimal { void Dog(); } clas ...
- 从头认识java-13.9 隐式和显示的创建类型实例
对于上一章节擦除引起的问题与解决的方法有读者提出过于简单.这里解释一下:由于笔者本身也遇不到对应的问题.仅仅是凭空想像一些有可能的问题,基于水平有限,因此上一章节写的比較简单,欢迎广大读者踊跃提意见, ...
随机推荐
- paste:linux合并两个文件中的列(左右合并)
[root@www ~]# paste [-d] file1 file2 选项与参数: -d :后面可以接分隔字符.默认是以 [tab] 来分隔的! - :如果 file 部分写成 - ,表示来 ...
- PCIE接口的说明
https://blog.csdn.net/u013253075/article/details/80835489
- java的Swing编程====实现鼠标双击一下==画图===getMouseClicked的方法
总结: 使用匿名类,但是用实现接口的方式呢??? package com.aa; import java.awt.Color; import java.awt.Graphics; import jav ...
- java图形化界面-------鼠标监听画圆----------使用匿名类
package com.aa; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseAdapter; ...
- docker 及 linux 初接触
3天来净折腾这俩东西了,总结一下(很多都是同事给出的解释,先不保证正确性): 1.docker 里的images 和 container images 类似系统盘,container类似用系统盘装起来 ...
- c语言之字符串数组
一.字符串与字符串数组 1.字符数组的定义 char array[100]; 2.字符数组初始化 char array[100] = {'a','b','c'}; //array[0] = 'a' ...
- python调用Go代码
Go 1.5发布了,其中包含了一个特性:可以编译生成动态链接库,经试验,生成的.so文件可以被python加载并调用.下面举个例子: 先写一个go文件main.go: package main imp ...
- Hadoop之HDFS(一)HDFS入门及基本Shell命令操作
1 . HDFS 基本概念 1.1 HDFS 介绍 HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统.是 Hadoop 核心组件之 ...
- Nginx 下配置Laravel 错误404
宝塔的访问路径改一下 在站点的配置文件下面server里面加上 location / { try_files $uri $uri/ /index.php?$query_string; } 然后重启Ng ...
- 学习神器!本机安装虚拟机,并安装Linux系统,并部署整套web系统手册(包含自动部署应用脚本,JDK,tomcat,TortoiseSVN,Mysql,maven等软件)
1. 引言 编写目的 本文档的编写目的主要是在Linux系统上部署mis_v3员工管理系统,方便测试,并为以后开发人员进行项目部署提供参考 准备工作 软件部分 软件项 版本 备注 Mysql 5. ...