C#中的接口概念

时间:2011-08-05 06:43:16

标签: c#

  

可能重复:
  What are some advantages to using an interface in C#?

为什么我们在C#中使用接口。什么是使用界面的优势。您能否解释一下这个概念,以便轻松理解界面的简单示例?

5 个答案:

答案 0 :(得分:4)

接口是一种将接口与实现分开的方法。

你可以说这是一个给我第n个素数的函数。那就是界面。如果我是用户,我不在乎你如何计算它 - 所以我只需要界面。

接口也提供了多重继承的替代方法 - 您只能有一个基类,但可以实现多个接口。

示例:

interface IPrimeComputer {
    int GetNPrime(int n);
}

class SieveComputer : IPrimeComputer {
    public int GetPrime(int n) {
        //compute the nth prime using a sieve
    }
}

class MagicComputer : IPrimeComputer {
    public int GetPrime(int n) {
        //compute the nth prime using some magic that no one else can understand.
    }
}

...
 IPrimeComputer computer = new MagicComputer();

 int nprime = computer.GetPrime(100);

 computer = new SieveComputer();

 nprime = computer.GetPrime(100);

答案 1 :(得分:3)

实现界面说嘿!看着我!我可以做这个。

接口适用于许多应用程序:

  • 单元测试:如果您的方法接受接口作为参数,您可以传递模拟对象来测试错误,确保找到的任何错误不是由参数中的错误引起的。
  • 代码重用如果代码使用接口,您可以使代码更通用,更通用的代码可以重用。例如,UI控件是高度可重用的组件,它们使用诸如INotifyPropertyChanged之类的接口,这些接口在实现时可以使您的自定义类在数据绑定中运行良好。
  • 软件工程最佳实践:将规范与实施分开是件好事,因为更聪明,更有经验的人这么说。还有很多好的设计模式需要使用接口。
  • Mixins:结合扩展方法,您可以使用接口来实现准混合。在类上实现该接口时,该类将继承相关的功能。我能想到的最好的例子是LINQ扩展方法,它适用于实现IEnumerable的类。接口本身不会给我们多重继承,但是mixins可以。
  • 跨越系统边界:为您希望跨越系统边界的对象(即Web服务)创建接口通常很好。这可以简化序列化,并允许您修改具体类,而不会影响两个系统之间的接口。

答案 2 :(得分:1)

是的,界面触及了C#不支持多重继承的事实,但这不是你应该使用接口的原因。正如Peter所说,这是一种分离对象实现和对象功能的方法。界面定义了您可以对对象执行的操作(功能),但对象的实现定义了您的操作方式。

假设您正在制作一个图形程序,您可以在其中将形状打印到要旋转的屏幕上。然后,您可能有一个接口IShape,用于定义方法RotateDraw,但这些方法的实际实现位于类RectangleCircle等。因为你很可能想要使用多个形状。

答案 3 :(得分:0)

有关接口What are some advantages to using an interface in C#?

的优点,请参阅此SO问题

接口的一个简单示例可能是:

public interface IAnimal
{

    void Sleep();

    void Run();

    void Talk();
}

接口将由一个类实现,该类将实现接口中指定的方法:

public class Dog : IAnimal
{

    public void Talk()
    {
        Console.WriteLine("Ruff!");
    }

    public void Run()
    {
        Console.WriteLine("The dog runs after balls and cars.");
    }

    public void Sleep()
    {
        Console.WriteLine("ZZZZZZZZZZ");
    }
}

另一个类会以不同的方式实现相同的方法:

public class Cat : IAnimal
{

    public void Talk()
    {
        Console.WriteLine("Meow");
    }

    public void Run()
    {
        Console.WriteLine("The cat looks at you and says, 'Yeah, right...'");
    }

    public void Sleep()
    {
        Console.WriteLine("All the time - what else does a cat do?");
    }
}

这些都是微不足道的例子,但应该给你一个想法。

答案 4 :(得分:0)

一个好处是实现接口的类别别无选择,只能以自己的方式实现接口的方法。

因此,如果您是接口的创建者,并且其他程序员需要从他们自己的类中实现它,那么这些类将具有来自您的接口的模式。