C# 接口显示实现和隐式实现
我们随时都可以创建接口的对象,但是编译器无法得知我们所创建的对象究竟是指向该接口的哪个实现的(如果有的话),甚至即便我们没有实现该接口也一样可以创建该接口的对象。简单来说就是如果我们只是创建了接口的对象,那么编译器就只知道这个对象是指向该接口的,至于其余的事情他一概不知。
隐式实现
interface ISkill { void Flying(); } //隐式实现ISkill接口 public class Bird: ISkill { public void Flying() { } }
调用
//第一种调用方式 Bird bird = new Bird(); bird.Flying(); //第二种调用方式 ISkill secondBrid = new Bird(); secondBrid.Flying();
用类和接口都可以调用Flying方法。
显示实现
c#中类可以实现多个接口,那么如果不同的接口有相同的方法名的话,此时需要显示实现。举例:
第1个接口:
第1个接口:
interface InterfaceA { void Say(); }
第2个接口:
interface InterfaceB { void Say(); }
实现类:
class Person:InterfaceA, InterfaceB { void InterfaceA.Say() { Console.WriteLine("helloA"); } void InterfaceB.Say() { Console.WriteLine("helloB"); } }
访问形式:
class Program { static void Main(string[] args) { InterfaceA p = new Person(); p.Say(); InterfaceB p2 = new Person(); p2.Say(); } }
显示实现只能通过对应的接口访问对应的接口内的方法。用实现类去访问时访问不到的。
其实很好理解,就是显示实现需要指定到具体的哪个接口的哪个方法,防止函数名冲突,调用模糊。
注意:
显示接口实现时,在方法名前不能加任何访问修饰符。这种方式和普通方法不同,普通方法前不加访问修饰符,默认为私有的,而显式接口实现时方法前不加任何修饰符,默认为公有的,如果前面加上修饰符,会出现编译错误。
调用显示接口实现的正确方式是通过接口引用,通过接口引用来确定要调用的版本。
总结:
- 当类实现一个接口时,通常使用隐式接口实现,这样可以方便的访问接口方法和类自身具有的方法和属性。
- 当类实现多个接口时,并且接口中包含相同的方法签名,此时使用显式接口实现。即使没有相同的方法签名,仍推荐使用显式接口,因为可以标识出哪个方法属于哪个接口。
- 隐式接口实现,类和接口都可访问接口中方法。显式接口实现,只能通过接口访问。
文章转载自:快速开发平台
地址:https://www.hocode.com/