C#中的接口

use*_*022 2 c# interface

我正在寻找C#中接口的一个非常简单的解释.我一直在问谷歌,但我得到的答案非常技术性和措辞,程序员可能会理解.它几乎听起来像是一个可以调用以执行函数的方法,它允许程序员使用较少的击键.

从我在下面阅读的内容来看,接口是一种创建方法容器的方法,该容器使用不同的技术执行相同的操作.

我想知道它们是什么?他们做什么?我可以用它们做什么?

Ian*_*nry 9

......以程序员可能理解的方式措辞.

如果您不是程序员,那么理解接口会遇到一些麻烦.如果不能很好地理解基本的面向对象原则,这可能看起来有点令人困惑.但是以后:

接口类似于类,但它不是告诉你对象什么,而是告诉你它做了什么.

例如,一个非常常见的界面是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或者东西)


Art*_*ina 7

想象一下,你有一家比萨饼店(我从着名的设计模式书中窃取了这个例子).你知道所有比萨都需要订购,准备,烘焙和装箱.那么,您可以在界面中定义这种常见行为:

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)

夏威夷,奶酪或任何其他披萨,你几乎都一样.

在现实生活中,接口有几种用途.您可以创建合同以扩展应用程序,或确保它适用于不同的情况.

希望这可以帮助

  • @Marko:没错.当类实现多个接口时,它会变得更加有趣.例如.IPizza和IDisposable,所以在制作披萨后,你知道如何清理! (4认同)