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

时间:2014-08-02 00:27:37

标签: c# inheritance

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

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

1 个答案:

答案 0 :(得分:5)

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

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

class Service {
         public void RenderService() {…}
         …
}   
class Customer: Service {         
       public Customer () {…}
       …
 } 

此示例中的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;
     }
}

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

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