正确的界面使用和解释

本文关键字:解释 界面 | 更新日期: 2023-09-27 17:56:24

很长一段时间以来,我一直在接口上喘着粗气,但我仍然无法理解它们的功能以及它们的作用。我阅读了数千个论坛帖子,我一直在问自己一个问题。我将向您解释我要问的问题是什么。

我们有这个核心,它做了一件非常简单的事情。我们采用一个类,在主类中,我们使用接口调用在该类中声明的函数。

public interface IAnimal
{
   string GetDescription();
}
class Cat : IAnimal
{     
   public string GetDescription()
   {
      return "I'm a cat";
   }
}
class Program
{
    static void Main(string[] args)
    {
       Cat myCat = new Cat();
       Console.WriteLine(myCat.GetDescription());
    }
}

我一直在问自己的问题。我们为什么要这样做?有什么意义?为什么不简单地这样做:

class Cat
{     
   public static string GetDescription()
   {
      return "I'm a cat";
   }
}
class Program
{
    static void Main(string[] args)
    {
    Cat.GetDescription();
    }
}

我将非常感谢任何帮助和适当的解释。我对简单准确的例子持开放态度。没什么太复杂的。我还希望您提供一些文字并解释为什么会这样和那样。

谢谢。

编辑:很抱歉让一些人感到困惑。在第二个描述中,我忘了将公共 void cat 更改为公共静态 void cat,因此它无法访问并且没有编译。

正确的界面使用和解释

这个问题被许多新程序员问过,你会得到几个答案。我是一名计算机科学专业的学生,我会尽力向你解释这一点。

接口提供了多重继承的替代方法。C# 允许您 只有一个基类固有的,但我们可以实现尽可能多的 我们想要的接口。

您上面发布的示例有一个类 Cat,它实现了接口IAnimal。在我看来,这有点错误,因为您应该将Animal用作抽象类。实际上,这不会有任何区别,但您在这里尝试使用的概念是inheritance(一只从动物继承的猫)。以下行来自 MSD:

如果您正在创建的功能对各种不同的对象有用,请使用接口。抽象类应主要用于密切相关的对象,而接口最适合为不相关的类提供通用功能。

所以现在你可能会想接口的真正目的是什么以及何时使用它们。答案很简单,当您想对接口的用户(或实现您的接口的其他开发人员)施加某种限制或想要从多个类中提取常见内容时,请使用接口。

使用继承和接口的一个很好的例子是:

假设您正在为电子设备构建软件。场景是这样的(父类 ->继承类):小工具 -> 电子产品 -> 电话小工具 -> 手机 -> 智能手机 -> 表格

并说手机,智能手机和平板电脑具有FM-RADIO的共同功能。此功能在其他非电话小工具中可用。现在,使用FM收音机作为接口将是完美的。每个小工具都将提供自己的FM收音机定义,但所有小工具都将共享相同的功能。

希望我已经清除了你的困惑。

因为稍微

接近现实世界的方案,所以你的代码看起来像:

static void Main(string[] args)
{
    List<IAnimal> animals = GetAllZooAnimals();
    foreach (IAnimal animal in animals)
        ProcessAnimal(animal);
}
static void ProcessAnimal(IAnimal animal)
{
     Console.WriteLine(animal.GetDescription());
}

后来,当阴暗的遗传学家发明鳄鱼时:

public class Crococat : IAnimal
{
    public string GetDescription()
    {
        return "I'm a horrible concoction that looks like a furry crocodile with whiskers and paws.";
    }
}

没有必要仅仅因为GetAllZooAnimals()返回一种从未见过的动物而更改Main()ProcessAnimal()。由于这些只关心所有动物可用的通用属性,因此它减少了我们在发明新动物时需要对程序代码进行的更改。