为什么我们使用Interface?
仅适用于标准化吗?
答案 0 :(得分:169)
类比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#中发现了神经网络的这种实现,包括项目下载,它以优雅和有用的方式使用接口: