接口的显式实现与隐式实现

我们在实现接口时,常常是类继承接口,然后在接口中实现相应的方法。代码如下:

 interface IOutput
    {
        void output();
    }
 
    class SimpleOutput : IOutput
    {
        public void output()
        {
            Console.WriteLine("SimpleOutput .....");
        }
 
      
        
    }
class Program
    {
        static void Main(string[] args)
        {
            SimpleOutput s = new SimpleOutput();
            IOutput i = s;
            s.output();
            i.output();
            Console.ReadLine();
        }
    }

使用代码测试一下实现的结果

可以看到继承接口的类s的输出s.output和接口i的输出i.output是一样的结果。

这是很常见的接口实现方式。那如果我们这样实现呢?看下面的代码:

 interface IOutput
    {
        void output();
    }
 
    class SimpleOutput : IOutput
    {
        public void output()
        {
            Console.WriteLine("SimpleOutput .....");
        }
 
        void IOutput.output()
        {
            Console.WriteLine("IOutput...");
        }
    }

SimpleOutput继承了Ioutput,同时实现了output和Ioutput.output的方法,那这会有什么不同呢?

我们使用同样的测试代码,来看一结果

  class Program
    {
        static void Main(string[] args)
        {
            SimpleOutput s = new SimpleOutput();
            IOutput i = s;
            s.output();
            i.output();
            Console.ReadLine();
        }
    }

从结果中可以看到,继承接口的s的输出s.output和接口i的输出i.output不一样了。

s.output输出的是SimpleOutput中的output方法,而i.output输出的是IOutput.output的方法。那这是为什么呢?

这其实就是接口的隐式实现和显式实现。

在第一种实现中,是常见的接口实现方法,在SimpleOutput中隐式的实现了接口IOutput的Output方法。

在第二种实现中,是在一些场合会用到的实现方法,在SimpleOutput中以IOutput.output的形式显式实现。注意,这里不可以添加public、private等修饰符,因为接口方法默认都是public的。

猜你喜欢

转载自blog.csdn.net/boiled_water123/article/details/82016814