......以程序员可能理解的方式措辞.
如果您不是程序员,那么理解接口会遇到一些麻烦.如果不能很好地理解基本的面向对象原则,这可能看起来有点令人困惑.但是以后:
接口类似于类,但它不是告诉你对象是什么,而是告诉你它做了什么.
例如,一个非常常见的界面是IEnumerable.当一个类实现该接口时,这意味着该对象可以创建并返回一个Enumerator,这可以由代码的其他部分(通常是foreach循环或LINQ查询)使用.
另一个你可能会看到的很多IDisposable.这意味着您调用.Dispose()对象上的调用,它将清理资源.它没有说明它将清理什么资源或对象是什么 - 它可能是一个StreamReader或一个SqlConnection或什么的.它说的是它有一个叫做的方法Dispose.
接口是非常有用的概念.如果你有很多非常不同的类但是有一些共同的行为,那么你可以让它们都实现一个接口,然后将它们作为一个接口进行操作.例如,如果您有一个界面:
interface ICanPrintMyContents
{
void PrintContents();
}
Run Code Online (Sandbox Code Playgroud)
然后是一堆实现它们的类:
class ParkingGarage : ICanPrintMyContents { ... }
class UnimpressivePolitician : ICanPrintMyContents { ... }
class BankingSimulation : ICanPrintMyContents { ... }
Run Code Online (Sandbox Code Playgroud)
您可以将它们全部放在一个列表中,即使它们的类之间没有真正的关系.
List<ICanPrintMyContents> list = { theGarage, insertNameHere, sim1, anotherGarage };
foreach(ICanPrintMyContents item in list)
list.PrintContents();
Run Code Online (Sandbox Code Playgroud)
(注意:ICan...命名约定没有被广泛使用,我也不建议.很多人不喜欢它,但我在这里使用它因为它很好地表达了界面的含义.更常见的是IPrintableContents或者东西)
想象一下,你有一家比萨饼店(我从着名的设计模式书中窃取了这个例子).你知道所有比萨都需要订购,准备,烘焙和装箱.那么,您可以在界面中定义这种常见行为:
public interface IPizza
{
void Order();
void Prepare();
void Bake();
void Box();
}
Run Code Online (Sandbox Code Playgroud)
并让你的不同种类的比萨饼实现该界面.实现接口时,您强制该类具有与接口相同的方法和参数,例如:
public class PepperoniPizza : IPizza
{
public void Order()
{
//Order Pepperoni pizza
}
public void Prepare()
{
//Prepare Pepperoni pizza
}
public void Bake()
{
//Bake Pepperoni pizza
}
public void Box()
{
//Box Pepperoni pizza
}
}
Run Code Online (Sandbox Code Playgroud)
夏威夷,奶酪或任何其他披萨,你几乎都一样.
在现实生活中,接口有几种用途.您可以创建合同以扩展应用程序,或确保它适用于不同的情况.
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |