温故知新:接口的隐式实现与显式实现
这二者的区别,仅在一个类同时实现多个接口,且多个接口中有相同的方法名字定义时,才有比较的意义。
using System; namespace InterfaceTest { class Program { static void Main(string[] args) { TestAB ab = new TestAB(); ab.HelloWorld(); //Hello World! IB b = ab as IB; b.HelloWorld(); //IB.HelloWorld! IA a = ab as IA; a.HelloWorld(); //IA.HelloWorld! Console.Read(); } } //IA的接口定义 interface IA { void HelloWorld(); } //IB的接口定义 interface IB { void HelloWorld(); } class TestAB : IA, IB { //隐式实现IA与IB的HelloWorld方法 public void HelloWorld() { Console.WriteLine("Hello World!"); } //显式实现IB接口的HelloWorld方法 void IB.HelloWorld() { Console.WriteLine("IB.HelloWorld!"); } //显式实现IA接口的HelloWorld方法 void IA.HelloWorld() { Console.WriteLine("IA.HelloWorld!"); } } }
输出结果已经说明了问题,就不多做解释了。
结论:
1、对于显式实现的接口方法,在类实例上调用时,需要显式转换为指定的接口,然后才能正确调用。
2、如果类实例不显式转换接口,直接用"类实例.接口同名方法"调用,将调用隐式实现的方法.
3、显式实现的接口方法,不能加public之类的关键字修饰。
4、通常显式实现并非必需的步骤.(本例中,可以去掉IA或IB的显式实现部分,甚至这二个显式实现都可以去掉,然后再观察下输出结果)
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。