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