我们为什么要使用Interface? 仅仅是为了标准化吗?

我们为什么要使用Interface?

仅仅是为了标准化吗?

接口的目的

  • 创build松散耦合的软件
  • 通过契约来支持devise (一个实现者必须提供整个接口)
  • 允许可插拔的软件
  • 允许不同的对象轻松交互
  • 隐藏类的实现细节
  • 促进软件的重用

比喻1 :就像美国的航天飞机一样,俄罗斯的联盟飞船和中国的神舟5号都可以和国际空间站对接,因为它们实现了同样的对接界面。 (这只是一个例子 – 我不知道在现实生活中是否真实,但是为了举例,让我们暂停我们的怀疑)

比喻2 :就像你可以插入各种电脑显示器到你的家用电脑。 你可以插入一个墙上的电视机,一个旧的CRT(厚的types),一个20“的平面屏幕或盲人机器,让盲人通过触摸”看“,这些不同的设备和你的电脑,因为他们都同意接口标准。

C#接口的详细信息 – 使用C#/ OOP接口,您可以在不可见/虚拟世界中做同样的事情。

您对标准化是正确的,但也是灵活性可扩展性可扩展性可维护性可重用性可testing性function

(使用软件接口的越多,这些“stream行语”就越多,而且在现实世界中总是要考虑接口,因为它们同样做得很好)。

一个接口用来描述一个实现的东西可以做什么。 因此,您可以将几个实现与此接口types相同的接口的对象作为对象。

例如:

 public interface IMyInterface{ public void DoFirst(); public int DoSecond(); } public class A : IMyInterface{ //class has to implement DoFirst and DoSecond public void DoFirst(){ Console.WriteLine("Blubb1"); } public int DoSecond(){ Console.WriteLine("Blubb2"); return 2; } } public class B : IMyInterface{ //class has to implement DoFirst and DoSecond public void DoFirst(){ Console.WriteLine("Blibb1"); } public int DoSecond(){ Console.WriteLine("Blibb2"); return 4; } } 

这些类以几种方式实现接口。 但是你可以使用它们作为IMyInterface。 例如:

 public static void DoMethodsInInterface(IMyInterface inter){ inter.DoFirst(); inter.DoSecond(); } public static void main(){ DoMethodsInInterface(new A()); DoMethodsInInterface(new B()); //Or use it in a List List<IMyInterface> interlist = new List<IMyInterface>(); interlist.Add(new A()); interlist.Add(new B()); foreach(IMyInterface inter in interlist){ inter.DoFirst(); } } 

我希望这个有点清楚为什么接口是有用的。

这是为了接口:),所以你可以在不同的东西之间进行交互,这是有用的,当你有

  • 相同的东西的多个实现
  • 当你将一个接口应用到多个不同的类时,因为你需要某种约定,这些类将会去做一些东西或者有一些function

接口在C#/ Java等语言中使用的主要原因是因为这些语言不支持多个(类)inheritance(请参阅多inheritance的具体问题是什么?

但是多个(接口)实现允许类以不同的方式使用。

这是高层次的观点

接口在信息隐藏的概念中扮演着重要的angular色。

他们基本上帮助你隐藏你的类的实现细节 ,使一个调用类没有依赖于该实现。 因此,通过使用接口,您可以在不更改调用类的情况下修改实现。 这反过来又限制了代码的复杂性 ,从长远来看更容易维护

当我第一次开始理解界面时,他们向我解释这是一个“提供你的课程描述的合同”。 不知道这是否会帮助你,但如果你想到一个汽车的接口,你可以说它驱动rest转身 。 所以只要从A点到B点,我就不必知道这些function是如何实现的。

接口有点尴尬。 他们只是通过相信支持合同devise,相同的名称和实现的接口意味着相同的行为。 这仅仅是由于API文档,它必须经过人工检查。 这使接口太弱。 解决这个问题的一种方法可能是正式的规范。 另一方面,接口太强大,太严格。 你不能演化那些经常被重用的接口。 这是通过协议解决的 – dynamic语言的机制,它发送消息(调用方法),当消息不被接收器支持时,标准的callback被调用。 具有约束条件的具体协议将会更好。

想想远程 …

这里有一个客户端和一个服务器。 比方说,他们是由互联网在物理上分开。 客户端正在调用在服务器上实际执行的方法。 从客户端的angular度来看,客户端并不知道执行执行的服务器中的对象。 但是它知道要调用什么方法。 因为在构build客户端程序的同时,我们只暴露于一个接口(或合同)。 我们没有接触到服务器上实际存在的整个对象。 尝试在.net远程处理中做一些演示应用程序,然后你就可以find其余的东西了。 开心编程。

为什么我们使用接口?

一些语言使用vtables实现多态方法调用,并丢弃大部分types信息,使得不能定义接口。

所以有时我们只是使用接口,因为语言devise需要它。

通过从一个接口开始,您可以实现一个代理 ,从而在调用具体实现的方法时允许延迟加载或执行一些validation。

接口将数据types从实现逻辑中分离出来。

接口提供的原型模态只包含特定行为的function声明。

如果你想实现这个行为到类中,那么你必须在类中实现这个接口,然后类有这个行为的function,或者它可以有多个行为。

因为类可以实现多个接口。

如果其他人像我一样,通过实例学习,而不仅仅是解释,这里是一些代码….

我在C#中发现了一个neural network的实现,包括项目下载,它以一种优雅而有用的方式使用了接口:

http://www.c-sharpcorner.com/UploadFile/rmcochran/AI_OOP_NeuralNet06192006090112AM/AI_OOP_NeuralNet.aspx

以下是使用接口的主要原因

  1. 可扩展性
  2. 实施隐藏
  3. 通过接口访问对象
  4. 松耦合。

请访问此链接了解有关可下载代码示例的接口