小议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 隐式和显示的创建类型实例
对于上一章节擦除引起的问题与解决的方法有读者提出过于简单.这里解释一下:由于笔者本身也遇不到对应的问题.仅仅是凭空想像一些有可能的问题,基于水平有限,因此上一章节写的比較简单,欢迎广大读者踊跃提意见, ...
随机推荐
- FPGA简单概述
中国FPGA市场及人才需求 如今毕业生的就业问题十分严峻,特别是计算机专业的毕业生.通过对FPGA目前发展情况的分析和市场岗位的调查,结合高职高专生在FPGA岗位的定位,制定相应的教学计划,使高职高专 ...
- HUSTOJ 昆虫繁殖(递推)
昆虫繁殖 时间限制: 1 Sec 内存限制: 128 MB提交: 25 解决: 16[提交][状态][讨论版][命题人:quanxing] 题目描述 科学家在热带森林中发现了一种特殊的昆虫,这种昆 ...
- Java-Maven-Runoob:Maven POM
ylbtech-Java-Maven-Runoob:Maven POM 1.返回顶部 1. Maven POM POM( Project Object Model,项目对象模型 ) 是 Maven 工 ...
- php对数组中的值进行排序
案例 <?php $a = array('1124','1125','1126'); $s1 = 1124; $s2 = 1125; $ks1 = array_search($s1,$a); $ ...
- js keyup、keypress和keydown事件 详解
js keyup.keypress和keydown事件 详解 js keyup.keypress和keydown事件都是有关于键盘的事件 当一个按键被pressed 或released在每一个现代浏 ...
- 第一章 为什么使用NoSQL
1.1 关系型数据库的价值 1.1.1 获取持久化数据 1.1.2 并发 通过”事务“ 来控制,出错有“回滚”机制. 1.1.3 集成 共享数据库集成,多个应用程序将数据 ...
- PHP文件操作(三)-文件的写入
fwrite() //对文件进行写入 fwrite(file,string,length)file:必选项,需要写入的文件string:必选项,规定要写入文件的字符串length:可选项,规定要写入 ...
- iTunes 安装ipa文件到iPhone上
iTunes 安装ipa文件到iPhone上 把ipa文件拖到itunes里面. ipa(iPhoneApplication) 菜单 File>Add File to Library>Se ...
- ffmpeg相关时间概念
v_rescale_q用于计算Packet的PTS.av_rescale_q的返回值是一个很大的整数,且每次计算的结果间隔很大. 不同于avcodec_encode_video改变AVCodecCon ...
- EasyGui
EasyGui 在IDLE上运行EasyGui可能存在冲突 EasyGui是运行在Tkinter上并哟拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并页拥有自身的事件循环.两者同时运 ...