为什么我们使用Interface?它只适用于标准化吗?

时间:2010-01-08 07:17:36

标签: oop interface ooad

为什么我们使用Interface?

仅适用于标准化吗?

12 个答案:

答案 0 :(得分:169)

接口的目的

  • 创建松散耦合的软件
  • 支持design by contract(实现者必须提供整个界面)
  • 允许使用可插拔软件
  • 允许不同的对象轻松互动
  • 隐藏彼此的类的实现细节
  • 促进软件的重复使用

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

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

Details of C# interfaces - 使用C#/ OOP接口,你可以做同样的事情,但是在看不见的/虚拟世界中。

您对标准化的正确性,还有灵活性可扩展性可扩展性可维护性可重用性可测试性功能

(您使用软件界面的次数越多,这些“热门词汇”就会被理解。并且始终考虑现实世界中的界面,因为它们同样做得很好。)

答案 1 :(得分:28)

接口用于描述已实现的内容可以执行的操作。因此,您可以将实现相同接口的多个对象视为此接口的类型。

例如:

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

}

我希望这有点清楚为什么接口很有用。

答案 2 :(得分:5)

这是为了接口:),所以你可以在东西之间进行接口,当你有

时它很有用
  • 相同内容的多个实现
  • 当你将接口应用于多个不同的类时,因为你需要某种约定,这些类可以做一些事情或者有一些功能

答案 3 :(得分:3)

这是高级视图......

接口在Information Hiding的概念中发挥着重要作用。

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

当我第一次开始理解界面时,他们被解释为“提供你的课程描述的合同”。不确定这是否对您有所帮助,但如果您想到汽车的界面,您可以说它驱动中断。所以只要它让我从A点到B点,我就不必知道这些函数是如何实现的。

答案 4 :(得分:2)

接口在C#/ Java等语言中使用的主要原因是因为这些语言不支持多(类)继承(参见What is the exact problem with multiple inheritance?)。

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

思考remoting ...

此处涉及客户端和服务器。让我们说他们在互联网上是分开的。客户端正在调用一个方法,该方法的实际执行发生在服务器上。从客户端的角度来看,客户端对执行执行的服务器中的对象一无所知。但是它知道调用什么方法。因为在构建客户端程序时,我们只接触到接口(或契约)。我们没有暴露于实际存在于服务器上的整个对象。尝试在.net远程处理中做一些演示应用程序,你会想到其余的。快乐的节目。

答案 7 :(得分:0)

  

为什么我们使用接口?

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

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

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

答案 11 :(得分:0)

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

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

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