C#中的接口概念

本文关键字:接口 | 更新日期: 2023-09-27 18:04:39

可能重复:
在C#中使用接口有哪些优点?

为什么我们在C#中使用接口。使用接口有什么好处。你能解释一下这个概念吗?很容易理解,也可以简单地举例说明界面?

C#中的接口概念

接口是一种分离。。。好的接口从实现。

你可以说这里有一个函数,它给了我第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);

实现一个接口说HEY!看看我!我能做到。

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

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

是的,接口触及了C#不支持多重继承的事实,但这不是应该使用接口的原因。正如Peter所说,这是一种将对象的实现与对象的功能分离的方法。接口定义了你可以对一个对象做什么(功能(,但对象的实现定义了你如何做

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

请参阅这个SO问题,了解接口的优势在C#中使用接口有哪些优势?

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

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?");
    }
}

这些都是琐碎的例子,但应该会给你一个想法。

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

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