OOP接口。
答案 0 :(得分:18)
根据我自己的经验,我发现界面在设计和实现多个开发人员的多个互操作模块时非常有用。例如,如果有两个开发人员,一个在后端工作,另一个工作在前端(UI),那么一旦他们完成接口,他们就可以开始并行工作。因此,如果每个人都遵循定义的合同,那么整合后来变得无痛。这就是接口的确切作用 - 定义合同!
基本上避免这种情况:
答案 1 :(得分:2)
当您需要一个类来操作子类实现的泛型方法时,接口非常有用。
public class Person
{
public void Eat(IFruit fruit)
{
Console.WriteLine("The {0} is delicious!",fruit.Name);
}
}
public interface IFruit
{
string Name { get; }
}
public class Apple : IFruit
{
public string Name
{
get { return "Apple"; }
}
}
public class Strawberry : IFruit
{
public string Name
{
get { return "Strawberry"; }
}
}
答案 2 :(得分:1)
在多重继承的情况下,接口非常有用。
答案 3 :(得分:0)
编程语言(C#,java)
这些语言不支持从类的多重继承,但它们支持从接口进行多次继承;这是界面的另一个优点。
答案 4 :(得分:0)
基本上,接口允许程序更改实现,而无需告诉所有客户端他们现在需要“Bar”对象而不是“Foo”对象。它告诉这个类的用户它做了什么,而不是它是什么。
示例:
您编写的方法想要遍历给定的值。现在有几件事你可以迭代,比如Lists,Arrays和Collections。
如果没有接口,您必须写:
public class Foo<T>
{
public void DoSomething(T items[])
{
}
public void DoSomething(List<T> items)
{
}
public void DoSomething(SomeCollectionType<T> items)
{
}
}
对于每个新的可迭代类型,您必须添加另一个方法,否则您的类的用户必须转换他的数据。例如,对于这个解决方案,如果他有一个FooCollectionType集合,他必须将它转换为Array,List或SomeOtherCollectionType。
使用接口只需:
public class Foo<T>
{
public void DoSomething(IEnumerable<T> items)
{
}
}
这意味着你的班级必须知道,无论用户传递给它,都可以迭代。如果用户将其SomeCollectionType更改为AnotherCollectionType,则他既不需要强制转换也不更改您的类。
请注意,抽象基类允许使用相同类型的抽象,但在使用方面略有不同。