接口的显式实现与隐式实现
我们在实现接口时,常常是类继承接口,然后在接口中实现相应的方法。代码如下:
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的。