理解接口最简单的方法是它们允许不同的对象暴露COMMON功能。这使得程序员可以编写更简单,更短的代码来编写接口,然后只要对象实现该接口就可以工作。
数据库提供:
有许多不同的数据库供应商中,MySQL,MSSQL,Oracle等。然而所有数据库对象可以做同样的事情,所以你会发现数据库对象的多个接口。如果一个对象实现了IDBConnection,那么它将暴露方法Open()和Close()。所以如果我希望我的程序是数据库提供者不可知的,我就编程到接口而不是特定的提供者。
IDbConnection connection = GetDatabaseConnectionFromConfig()
connection.Open()
// do stuff
connection.Close()
见编程接口(的IDbConnection),我现在就可以在我的配置换出任何数据提供者,但我的代码保持完全相同的。这种灵活性非常有用且易于维护。这样做的缺点是我只能执行'通用'数据库操作,可能无法充分利用每个特定提供商提供的优势,因此编程中的所有内容都有所折衷,您必须确定哪种方案最有利于您。
类别:
如果您发现几乎所有的收藏品实现此接口称为IEnumerable的。 IEnumerable返回具有MoveNext(),Current和Reset()的IEnumerator。这使C#可以轻松移动您的集合。它可以做到这一点的原因是因为它暴露IEnumerable接口,它知道对象公开它需要通过它的方法。这有两件事。 1)foreach循环现在将知道如何枚举集合,并且2)现在您可以将强大的LINQ表达式应用于您的集合。同样,接口在这里非常有用的原因是因为所有集合在COMMON中都有一些东西,所以它们可以通过。每个集合都可以通过不同的方式移动(链接列表vs数组),但接口的美妙之处在于,实现对于接口的消费者而言是隐藏的并且不相关的。 MoveNext()为您提供了集合中的下一个项目,不管它如何实现。相当不错,是吧?
多态性
当你设计自己的接口,你只需要问自己一个问题。这些东西有什么共同点?一旦你找到了对象共享的所有东西,你就可以将这些属性/方法抽象成一个接口,以便每个对象都可以继承它。然后您可以使用一个界面针对多个对象进行编程。
当然,我必须给我最喜欢的C++多态的例子,动物的例子。所有动物都有一定的特征。让我们说他们可以移动,说话,他们都有一个名字。因为我刚刚确定了我的所有动物的共同点,并且我可以将这些特征抽象为IAnimal接口。然后我创建一个Bear对象,一个Owl对象和一个Snake对象,它们都实现了这个接口。您可以将不同对象存储在一起以实现相同接口的原因是因为接口代表了IS-A替代权。一只熊IS-A动物,一只猫头鹰IS-A动物,所以它使我可以将它们全部收集为动物。
var animals = new IAnimal[] = {new Bear(), new Owl(), new Snake()} // here I can collect different objects in a single collection because they inherit from the same interface
foreach (IAnimal animal in animals)
{
Console.WriteLine(animal.Name)
animal.Speak() // a bear growls, a owl hoots, and a snake hisses
animal.Move() // bear runs, owl flys, snake slithers
}
你可以看到,即使这些动物以不同的方式执行每一个动作,我可以在一个统一的编程模型,对他们的一切,这只是接口的众多优势之一。
所以接口最重要的事情就是对象有什么共同点,以便您可以用同样的方式对不同的对象进行编程。节省时间,创建更灵活的应用程序,隐藏复杂性/实现,模拟真实世界的对象/情况以及许多其他好处。
希望这会有所帮助。
这可能有助于:interfaces描述* peripheral *属性,抽象类定义* core *函数。 – Jason 2012-02-26 09:19:06
如果你想让你的项目支持不同的数据库。以便客户端可以在将来改变他的数据库我们使用接口包含属性程序在类文件中不会改变对象........ – 2012-02-26 09:19:24
有几十个这个问题的潜在重复...这里有几个:[1 ](http://stackoverflow.com/questions/240152/why-would-i-want-to-use-interfaces),[2](http://stackoverflow.com/questions/3355408/explaining-interfaces-to -students),[3](http://stackoverflow.com/questions/122883/interfaces-why-cant-i-seem-to-grasp-them) – 2012-02-26 11:23:51