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

Azh*_*har 79 oop ooad interface

为什么我们使用Interface?

它只适用于标准化吗?

Joh*_*n K 170

接口的目的

  • 创建松散耦合的软件
  • 通过契约支持设计(实现者必须提供整个界面)
  • 允许可插拔软件
  • 允许不同的对象轻松交互
  • 隐藏彼此的类的实现细节
  • 促进软件的重用

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

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

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

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

(你使用软件接口的次数越多,这些"热门词汇"就会被理解.并且总是考虑现实世界中的接口,因为它们同样做得很好.)

  • 你遗漏了我最喜欢的接口:可测试性.如果我有两个类,A&B和A.foo调用B.bar,那么只要B实现一个接口并且可以"注入"A,那么我可以使用mock,fake或stub类而不是当A.foo根据B.bar的返回值改变其行为时,这尤其有用.(比如B.bar返回一个bool .A.foo可能有一个带有else子句的if(B.bar)语句.)在B中使用接口允许我创建mockB,fakeB和/或stubB,这允许我测试什么当B.bar返回true或false时发生. (18认同)
  • +1标准化,但也包括灵活性,可扩展性,可扩展性,可维护性,可重用性,可测试性和功能 (6认同)
  • 航天器+1:D (2认同)

mar*_*tin 29

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

例如:

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;
   }
}
Run Code Online (Sandbox Code Playgroud)

这些类以多种方式实现接口.但您可以将它们用作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();
   }

}
Run Code Online (Sandbox Code Playgroud)

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

  • 这个问题与一个问题相关联,该问题询问为什么要使用接口而不是简单地让成员执行相应的功能等等,而你的答案最接近回答那个问题.如果两个不相关的类都有一个方法`Woozle`,任何想要接受对类和`Woozle`的引用的代码,它必须知道它正在处理哪个类,并且只能够`Woozle`对它进行分类知道.相比之下,如果两个类都实现了`IWoozler`,那么给出任何`IWoozler`的代码都可以`Woozle`它而不必知道它的确切类型. (2认同)

Omu*_*Omu 5

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

  • 同一东西的多个实现
  • 当你将一个接口应用于多个不同的类,因为你需要某种约定,这些类将能够做一些东西或具有一些功能