81

我们为什么要使用接口?

仅仅是为了标准化吗?

4

12 回答 12

174

接口的用途

  • 创建松散耦合的软件
  • 支持按合同设计(实现者必须提供整个接口)
  • 允许可插拔软件
  • 允许不同的对象轻松交互
  • 相互隐藏类的实现细节
  • 促进软件的重用

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

类比2:就像您可以将各种计算机显示器插入家用计算机一样。您可以将壁挂式电视、旧 CRT(厚的那种)、20 英寸纯平屏幕或盲人盲文机插入其中以通过触摸“看到”。这些不同/不同的设备和您的计算机,因为他们都同意接口标准。

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

你对标准化是正确的,但灵活性可伸缩性可扩展性可维护性可重用性可测试性功能也是正确的。

(您使用软件界面的次数越多,这些“流行词”就会被理解得越多。并且始终考虑现实世界中的界面,因为它们对我们同样适用。)

于 2010-01-08T07:21:28.760 回答
30

接口用于描述实现的事物可以做什么。因此,您可以将实现相同接口的多个对象视为该接口的一种类型。

例如:

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();
   }

}

我希望这能说明接口为什么有用。

于 2010-01-08T07:28:59.670 回答
5

它用于接口:),这样你就可以在东西之间进行接口,当你有的时候它很有用

  • 相同东西的多种实现
  • 当您将接口应用于多个不同的类时,因为您需要某种约定,这些类将能够做一些事情或具有某些功能
于 2010-08-14T12:11:02.290 回答
4

这是高级视图...

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

它们基本上可以帮助您隐藏类的实现细节,以便调用类确实不依赖于该实现。因此,通过使用接口,您可以在不更改调用类的情况下修改实现。这反过来又限制了代码的复杂性,并使其更易于长期维护。

当我第一次开始理解接口时,它们被解释为“提供类描述的合同”。不确定这是否对您有帮助,但如果您想到汽车的界面,您可以说它可以行驶刹车转弯。所以只要它让我从 A 点到 B 点,我真的不需要知道这些功能是如何实现的。

于 2010-01-08T21:49:56.493 回答
2

在 C#/Java 等语言中使用接口的主要原因是这些语言不支持多重(类)继承(请参阅多重继承的确切问题是什么?)。

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

于 2010-01-08T09:03:29.163 回答
2

界面有些尴尬。他们仅仅因为相信相同的名称和实现的接口意味着相同的行为而支持按合同设计。这要归功于 API 文档,它必须经过人工检查。这使得接口太弱了。解决这个问题的一种方法可能是正式规范。另一方面,接口太强大,太严格。你不能发展经常妨碍重用的接口。这是通过协议解决的 - 动态语言中的机制,它发送消息(调用方法),当接收者不支持该消息时,标准回调被调用。拥有带有约束的具体协议会更好。

于 2010-01-25T08:40:26.660 回答
1

远程...

这里涉及一个客户端和一个服务器。可以说它们在物理上被互联网分开。客户端正在调用一个实际执行发生在服务器上的方法。从客户端的角度来看,客户端对执行执行的服务器中的对象一无所知。但是它知道要调用什么方法。因为在构建客户端程序时,我们只接触到一个接口(或合同)。我们没有接触到实际存在于服务器上的整个对象。尝试在 .net remoting 中做一些演示应用程序,剩下的你就知道了。快乐编程。

于 2010-01-25T18:01:00.313 回答
0

我们为什么要使用接口?

一些语言使用 vtables 实现多态方法调用并丢弃大部分类型信息,从而很难定义接口。

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

于 2010-01-08T21:17:05.043 回答
0

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

于 2010-08-14T05:59:35.897 回答
0

接口将数据类型与实现逻辑分开。

于 2012-12-22T08:05:12.510 回答
0

接口提供仅包含特定行为功能声明的原型模式。

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

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

于 2014-02-26T12:27:08.063 回答
0

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

我在 C# 中找到了一个神经网络的实现,包括项目下载,它以一种优雅而有用的方式使用接口:

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

于 2014-12-01T19:10:31.477 回答