gpt4 book ai didi

c# - 为什么我们从接口(interface)而不是类创建对象实例?

转载 作者:IT王子 更新时间:2023-10-29 03:46:52 24 4
gpt4 key购买 nike

我已经多次看到从一个类中生成一个接口(interface)实例。为什么我们要这样使用接口(interface)?接口(interface)实例是在派生类的帮助下创建的,我们只能通过该实例访问这些接口(interface)成员。这如何带来优势?我很困惑。

interface IPrint
{
void Print();
}

class Sample : IPrint
{
public void Print()
{
Console.WriteLine("Print...");
}

public void Sample()
{
Console.WriteLine("Sample...");
}
}

class Program
{
static void Main(string[] args)
{
IPrint print = new Sample();
print.Print();
}
}

最佳答案

接口(interface)定义类必须能够做某事。这意味着您知道正在处理的对象将执行您希望能够执行的操作。它让你有更大的自由度,也是OOP的优势之一。这是一个很深的话题,但一个非常基本的例子是这样的:

public interface IAnimal
{
string Speak();
}

public class Dog : IAnimal
{
public string Speak()
{
return "Woof, woof";
}
}

public class Cat : IAnimal
{
public string Speak()
{
return "Meow";
}
}

public class Parrot : IAnimal
{
public string Speak()
{
return "Sqwark!";
}
}

然后你可以使用任何你喜欢的动物!

class Program
{
static void Main(string[] args)
{
// Writes Woof, Woof
IAnimal animal = new Dog();
Console.WriteLine(animal.Speak());

// Now writes Meow
animal = new Cat();
Console.WriteLine(animal.Speak());

// Now writes Sqwark etc
animal = new Parrot();
Console.WriteLine(animal.Speak());
}
}

这还允许您随后进入控制反转之类的事情,您可以像这样拿一个元素,然后您可以传递一只狗、猫或鹦鹉,这种方法总是有效的,而不是知道或关心它是哪种动物:

public void ShoutLoud(IAnimal animal)
{
MessageBox.Show("Shout " + animal.Speak());
}

这使得 ShoutLoud 可单元测试,因为您可以使用模拟对象而不是真实的动物。它基本上使您的代码灵活和动态,而不是僵化和紧密耦合。

另外,对 Matthew 的问题进行了扩展。在 C# 中,您只能继承一个基类,但可以拥有多个接口(interface)。所以,你可以:

public class Dog : IAnimal, IMammal, ICarnivor

这允许您拥有小型接口(interface)(推荐),然后允许您进行构建,从而最大程度地控制项目可以/必须做什么。

关于c# - 为什么我们从接口(interface)而不是类创建对象实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com