博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小议C#接口的隐式与显示实现
阅读量:7068 次
发布时间:2019-06-28

本文共 1612 字,大约阅读时间需要 5 分钟。

小弟不才,各位大牛嘴下留情。。。

 

一、对于继承类里头有相同方法时候,用接口方式去调用,会优先查走显式接口方法

例如

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

 

总结:接口对象调用方法时候,会去找第一实现接口方法。。。

 

 

 

转载于:https://www.cnblogs.com/walleyekneel/p/3581489.html

你可能感兴趣的文章
[logstash-input-log4j]插件使用详解
查看>>
AlertDialog自定义关闭
查看>>
KgMall B2B/C2C店铺卖家注册流程
查看>>
关于OSG+VR里显示手柄的工作记录
查看>>
Hello Blog
查看>>
Openerp internal server error
查看>>
PowerShell获取系统日志
查看>>
VI批量替换文本,多行删除,复制,移动
查看>>
CSS控制DIV两列左右高度一致
查看>>
AndroidStudio无法引用RecyclerView
查看>>
怎么调试React,使用Chrome引入的source-map文件
查看>>
opengl 关键函数解析
查看>>
ngx_lua常用变量参数
查看>>
替换文件夹中特定字符串工具类
查看>>
chrome使用百度搜索卡死 解决办法
查看>>
linux开机自启动命令
查看>>
TabBar with Expands
查看>>
使用GCD的dispatch_once创建单例
查看>>
jpa中的一对多级联删除
查看>>
面试需要的基础知识-二维数组中的查找
查看>>