为什么使用接口,类和继承有什么问题

Mar*_*n B 2 c# inheritance

我知道在这个网站上可能会多次询问这个问题.我已经阅读了其他帖子并阅读了一些关于我们为什么必须使用接口的书籍.所有这些帖子和书籍都说,接口就像类,但它们只能包含函数,所有实现它们的类也应该实现它们的方法.所以我基本上知道它们是什么但是我不明白我为什么要编写一个接口,当我可以创建一个超类并将我的其他类扩展到那个超类而不是一次又一次地重写继承的函数.

如果有人向我解释,我真的很感激.

Tra*_*ent 5

使用接口的关键是创建松散耦合类型.这是因为接口是完全抽象的,每个实现它们的类都应该有自己特定的接口方法实现.如果创建基类而不是接口,则所有派生类都与基类紧密耦合.在特定情况下,这种紧密耦合会引起一些问题.最简单和最易消化的问题,这种紧密耦合会导致是创建静态绑定的行为,可以将代码限制到特定的上下文.另一方面,松耦合类型是动态绑定的,这意味着它们更通用且更可重用.

例如:假设您有一个名为Service的类,另一个名为Customer,如果您这样做:

class Service {
         public void RenderService() {…}
         …
}   
class Customer: Service {         
       public Customer () {…}
       …
 } 
Run Code Online (Sandbox Code Playgroud)

此示例中的Customer类与Service类紧密耦合.想象一下,如果我们想要引入一个名为Service2的新服务.现在,我们的Customer类将变得无用,我们还需要引入另一个类,如Customer2.

现在想象一下界面的用法:

interface IService {
       void RenderService();
}
class Service: IService {
      public void RenderService() {…}
}
class Customer {
     IService service; 
     public Customer(IService service) {
           this.service = service;
     }
}
Run Code Online (Sandbox Code Playgroud)

使用这种技术(也称为依赖注入),您可以通过创建另一个类来引入Service2,该类也实现了IService接口,并且仍然使您的Customer类有用并且无需重写它.

除此之外,还有其他原因可以使用接口,例如创建高度通用(即多态)类型或方法.因此,作为结论,简单地编写类和使用继承以及为代码引入接口之间存在巨大差异.我希望我可以帮助你消化界面的使用.