我一直在界面上喘气很长时间,我仍然无法理解他们的功能以及他们做了什么。我阅读了数以千计的论坛帖子,我一直在问自己一个问题。我会向你解释我所问的问题是什么。
我们有这个核心,它做了一件非常简单的事情。我们接受一个类,在主类中,我们使用接口调用在该类中声明的函数。
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();
}
}
我会非常感谢任何帮助和正确的解释。我愿意接受简单准确的例子。没有什么太复杂的了。我还希望你提供一些文字并解释为什么会这样,那就是。
谢谢。
编辑: 我很抱歉让一些人感到困惑。在第二个描述中,我忘了将public void cat更改为public static void cat,因此它无法访问且无法编译。
答案 0 :(得分:1)
许多新程序员都会问这个问题,你会得到几个答案。我是计算机科学专业的学生,我会尽力向您解释。
接口提供了多重继承的替代方案。 C#允许你 只有一个基类固有,但我们可以实现尽可能多的基类 我们想要的接口。
您在上面发布的示例中有一个Cat类,它实现了一个接口IAnimal
。我认为这有点不对,因为你应该使用Animal
作为抽象类。实际上,这不会有任何区别,而你在这里尝试使用的概念是inheritance
(一只猫继承自Animal)。以下行来自How to set notification with custom sound in android:
如果您创建的功能在各种不同的对象中都有用,请使用界面。抽象类应主要用于密切相关的对象,而接口最适合为不相关的类提供通用功能。
所以现在你可能会想到接口的真正目的是什么以及何时使用它们。答案很简单,当您想对接口的用户(或实现接口的其他开发人员)施加某种限制或想要从几个类中提取常见内容时,请使用接口。
使用继承和接口的一个很好的例子是:
让我们假设您正在为电子设备构建软件。场景就像(父类 - >继承类): 小工具 - >电子小工具 - >电话小工具 - >手机 - >智能手机 - > Tablest
并表示手机,智能手机和平板电脑具有 FM-RADIO 的共同特征。其他小工具可以使用此功能,而不是电话小工具。现在,将FM-Radio用作接口将是完美的。每个小工具都会提供自己的FM-Radio定义,但所有小工具都会共享相同的功能。
希望我已经清除了你的困惑。
答案 1 :(得分:0)
因为稍微接近真实场景,您的代码将如下所示:
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());
}
后来,当阴暗的遗传学家发明了Crococat:
public class Crococat : IAnimal
{
public string GetDescription()
{
return "I'm a horrible concoction that looks like a furry crocodile with whiskers and paws.";
}
}
没有必要更改Main()
或ProcessAnimal()
因为GetAllZooAnimals()返回一种前所未见的动物类型。由于这些只关心所有动物可用的通用属性,因此它减少了我们在发明新动物时对程序代码所做的更改。