zoukankan      html  css  js  c++  java
  • 小议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代码接口继承ConsoleApplication1ConsoleApplication1Program.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

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

  • 相关阅读:
    [Selenium]Eclipse hangs at 57% in debug mode with TestNG tests
    [Selenium] CSS3 选择器
    [Selenium]如何实现上传本地文件
    [Selenium]显式等待 Explicit wait & 隐式等待 Implicit wait
    [Selenium]中使用css选择器进行元素定位
    [Selenium]验证点了某个Button之后无反应
    7. Debug on local machine
    6. Manage the driver for browser and the script for Hub
    4. Configure maven in Spring Tool Suite
    3. Install Spring-Tool-Suite & TestNG
  • 原文地址:https://www.cnblogs.com/walleyekneel/p/3581489.html
Copyright © 2011-2022 走看看