开头引用一篇文章的内容“C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认识到接口的作用的时候就觉得用接口是多此一举”,作为小白的我在刚学习的时候产生了同样的疑惑,我觉得接口没有给出具体的实现方法确实是多此一举了,除了让代码加了一层跳转好像没什么实际作用。然后在开发的过程中当我大量看到同事的代码的时候,我发现事情好像并没有这么简单,所以我总结归纳了几个接口的优点,并且对其中几点做了详细分析。
优点:
-
实现多态性(Polymorphism):接口提供了多态性的实现,允许一个类实现多个接口。这使得类可以以不同的方式对外部对象进行操作,从而增加了代码的灵活性和可扩展性。
-
解耦和模块化:接口可以帮助将接口与其实现分离,从而降低代码之间的耦合度。通过接口,类可以与其他类进行交互,而无需关心具体的实现细节,这样可以更容易地修改或替换实现而不会影响到其他代码。
-
增强代码可读性:接口可以为代码提供更好的可读性,因为接口可以描述类应该实现的功能。通过阅读接口,开发人员可以快速了解一个类所需要实现的功能。
-
促进代码复用:通过接口,多个类可以共享相同的行为,从而促进代码的复用。一个类可以实现多个接口,以便在不同的上下文中重用其功能。
-
支持多继承:在 C# 中,类只能继承自一个基类,但是可以实现多个接口。这样就实现了类似于多继承的功能,允许一个类从多个不同的接口继承功能。
-
使代码更易于维护:接口可以为代码提供更好的组织结构和抽象,使代码更易于维护和理解。接口提供了一种清晰的契约,明确了类应该实现的功能,有助于开发人员更好地理解代码结构。
第一点就不用多说了(大家在实际使用过程中慢慢体会吧,感觉怎么解释都很假大空);关于第二点就是我产生疑惑的地方,明明可以直接实现,接口却只抽象了一个类不提供具体实现(因为截至目前作者并没有感觉到解耦的好处,但是模块化确实可以让代码可读性增加);第四点我们在第五点中会提到,下面我们来详细说说第五点。
我们继续引用网上很出名的一篇文章的例子(确实很形象)
我们定义一个接口:
public interface IBark
{
void Bark();
}
再定义一个类,继承于IBark,并且必需实现其中的Bark()方法
public class Dog:IBark
{
public Dog()
{
public void Bark()
{
Consol.write("汪汪");
}
}
}
然后,声明Dog的一个实例,并调用Bark()方法
Dog 旺财=new Dog();
旺财.Bark();
看起来这么写确实很简洁,但是我们直接定义Dog类似乎也很简洁
public Dog()
{
public void Bark()
{
Consol.write("汪汪");
}
}
何必要再套一层壳呢,这时候就要提到多继承的问题,如果我们想要了解Dog类的其他信息,比如喜欢吃的食物,我们可以直接让Dog类继承另一个接口然后提供具体的实现方法而不用修改整个Dog类了(刚好符合第四点)
public interface IFood
{
void Food();
}
public class Dog:IFood
{
public Dog()
{
public void Food()
{
Consol.write("骨头");
}
}
}
Dog 旺财=new Dog();
旺财.Food();
旺财.Bark();
这样我们就实现了Food和Bark方法,后面还需要其他方法我们可以继续继承其他接口而不用改写Dog类,至于第六点直接加接口继承不用改原来的类当然使代码更容易维护了。