我们为什么要使用接口?
它仅用于标准化吗?
Answers:
类比1:与美国的航天飞机一样,俄罗斯的联盟号飞船和中国的神舟5号飞船都可以对接国际空间站,因为它们实现了相同的对接接口。(这只是一个例子-我不知道这在现实生活中是否属实,但是为了举例说明,让我们暂缓怀疑)
类比2:就像您可以将各种计算机显示器插入家用计算机一样。您可以将壁挂式电视插入其中,也可以插入旧的CRT(较厚的CRT),20英寸的纯平屏幕或盲文机,以使盲人可以通过触摸“看到”盲文。这些各种/不同的设备与您的设备兼容计算机,因为它们都同意接口标准。
C#接口的详细信息-使用C#/ OOP接口,您可以做的事情是一样的,但是看不见的/虚拟的。
您对标准化的看法是正确的,但在灵活性,可扩展性,可扩展性,可维护性,可重用性,可测试性和功能方面都是对的。
(您使用软件界面的次数越多,对这些“流行语”的理解就越多。请务必考虑现实世界中的界面,因为它们对我们的作用同样出色。)
standardization, but also flexibility, scalability, extensibility, maintainability, reusability, testability and power.
接口用于描述已实现的功能。因此,您可以将实现同一接口的多个对象视为该接口的类型。
例如:
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;
}
}
这些类以几种方式实现Interface。但是您可以将它们用作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();
}
}
我希望这可以弄清楚为什么接口有用。
Woozle
,那么任何想要接受对任何一个类的引用的代码,Woozle
都必须知道它正在处理哪个类,并且只能对其知道的类进行处理Woozle
。相反,如果两个类都实现IWoozler
,则IWoozler
可以Woozle
在不知道其确切类型的情况下给定任何代码。
在诸如C#/ Java之类的语言中使用接口的主要原因是,因为这些语言不支持多重(类)继承(请参阅多重继承的确切问题是什么?)。
但是允许多个(接口)实现,从而允许以不同方式使用类。
接口有些尴尬。他们相信,通过合同支持设计,相同的名称和实现的接口意味着相同的行为。仅依靠API文档,此方法才有效,必须进行人工检查。这会使接口太弱。解决该问题的一种方法可能是正式规范。另一方面,接口太强,太严格。您不能开发经常妨碍重用的接口。这可以通过协议来解决-协议是一种动态语言的机制,可以发送消息(调用方法),并且当接收者不支持该消息时,将调用标准回调。具有约束的具体协议会更好。
接口提供了原型模式,该模式只包含特定行为的功能声明。
如果要在类中实现此行为,则必须在类中实现此接口,则类具有此行为功能,或者可以具有多个行为。
因为类可以实现多个接口。
如果还有其他人像我一样,是通过示例学习和做事的,而不仅仅是解释,那么这里有一些代码...。
我在C#中找到了这种神经网络的实现,包括项目下载,该实现以一种优雅而有用的方式利用了接口: