题
为什么我们使用接口?
仅是标准化吗?
解决方案
接口的目的
- 创建松散耦合的软件
- 支持 通过合同设计 (实施者必须提供整个接口)
- 允许可插入软件
- 允许不同的对象轻松交互
- 隐藏彼此类的实施详细信息
- 促进软件重复使用
类比1: :就像美国航天飞机一样,俄罗斯的Soouz Spacecraft和中国的神经5都可以将它们都停靠在国际空间站,因为它们实施了相同的对接界面。 (这只是一个例子 - 我不知道它在现实生活中是否真的,但是让我们怀疑一个例子)
类比2: :就像您可以将各种计算机监视器插入家用计算机一样。您可以将墙壁大小的电视插入其中,一个旧的CRT(厚实的CRT),20英寸的屏幕或盲目的盲文机器,以触摸“ See”。计算机是因为他们都同意接口标准。
C#接口的详细信息 - 使用C#/OOP接口,您正在做同样的事情,但在看不见的/虚拟世界中。
你是正确的 标准化, , 但是也 灵活性, 可伸缩性, 可扩展性, 可维护性, 可重复使用, 可检验性 和 力量.
(您使用软件界面越多,这些“流行语词”就越能理解。并且始终考虑现实世界中的接口,因为它们做得同样好。)
其他提示
接口用于描述实现的事情可以做什么。因此,您有可能处理几个对象,这些对象实现了与此接口类型相同的接口。
例如:
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();
}
}
我希望这有点清楚为什么接口有用。
它是用于接口的:),以便您可以在东西之间接口,当您拥有时,它很有用
- 同一内容的多个实现
- 当您将接口应用于多个不同类别时,因为您需要某种惯例,这些惯例是这些类是Goonna可以做一些事情或具有一些功能的惯例
这是高级视图...
接口在概念中起着重要作用 信息隐藏.
他们基本上可以帮助您隐藏 实施细节 您的班级的呼叫类别不依赖该实现。因此,通过使用界面,您可以修改实现,而无需更改调用类。这一切都 限制复杂性 您的代码并做到 更容易维护 从长远来看。
当我第一次开始理解界面时,它们被向我解释为“提供您班级描述的合同”。不确定这是否会帮助您,但是如果您想到汽车的界面,您可以说 驱动器, 休息, , 和 转. 。因此,只要它使我从A点到B点,我真的不必知道如何实现这些功能。
界面是在诸如C#/Java之类的语言中使用的主要原因是因为这些语言不支持多个(类)继承(请参阅 多重继承的确切问题是什么?).
但是允许多个(接口)实现,允许以不同的方式使用类。
接口有些尴尬。他们仅通过相信合同来支持设计,同样的名称和实现的接口意味着相同的行为。这只能归功于API文档,必须进行人为检查。这使得接口太虚弱。解决这可能是正式规格的一种方法。另一方面,界面太强,太严格了。您无法发展界面,这些接口通常会以重复使用的方式发展。这是通过协议 - 动态语言中的机制来解决的,它们发送消息(呼叫方法)以及接收者不支持该消息时,请调用标准回调。具有限制性的具体协议将更好。
思考 远程...
这里有一个客户端和服务器。可以说,它们在互联网上被身体分离。客户端正在调用其实际执行在服务器上发生的方法。从客户端的角度来看,客户端对执行执行的服务器中对象一无所知。但是,它知道该调用什么方法。因为在构建客户程序时,我们只接触到接口(或合同)。我们没有暴露于实际生活在服务器上的整个对象。尝试在.NET远程执行一些演示应用程序,其余的。愉快的节目。
我们为什么使用接口?
某些语言使用VTABLES实现多态方法调用,并丢弃大多数类型信息,使其很难 不是 定义接口。
因此,有时候我们只是使用接口,因为语言设计需要它。
从接口开始,您可以实现 代理人, ,因此允许在调用混凝土实现的方法时进行懒惰的加载或执行一些验证。
接口将数据类型与实现逻辑分开。
界面提供原型模态,仅包含特定行为功能的声明。
而且,如果您想在类中实现此行为,那么您必须在类中实现此界面,然后类具有此行为功能,或者可以具有多个行为。
因为类可以实现多个接口。
如果其他人像我一样,并以身作则,做的,而不是仅仅说明,这是一些代码。
我发现C#中的神经网络的实现,包括项目下载,该项目以优雅而有用的方式使用接口: