C# 类何时应该实现接口,何时不应该实现接口?

C# 类何时应该实现接口,何时不应该实现接口?,c#,.net,interface,C#,.net,Interface,为了在类上强制某种“契约”,类是否应该始终实现接口 什么时候类不应该实现接口 编辑:意思是,什么时候值得让一个类实现一个接口?为什么不让一个类只包含具有各种访问器/设置器函数的公共成员和私有成员 (注意:不要谈论COM)不,并不总是需要接口-类的公共成员已经形成了合同 如果希望在两个类都提供类似功能的情况下能够将一个类交换为另一个类,则接口非常有用。使用接口可以将契约与特定实现分离。然而,这种解耦并不总是必要或有用的 .NET framework中的许多类不实现任何接口。仅在需要时使用接口。 也

为了在类上强制某种“契约”,类是否应该始终实现接口

什么时候类不应该实现接口

编辑:意思是,什么时候值得让一个类实现一个接口?为什么不让一个类只包含具有各种访问器/设置器函数的公共成员和私有成员


(注意:不要谈论COM)

不,并不总是需要接口-类的公共成员已经形成了合同

如果希望在两个类都提供类似功能的情况下能够将一个类交换为另一个类,则接口非常有用。使用接口可以将契约与特定实现分离。然而,这种解耦并不总是必要或有用的


.NET framework中的许多类不实现任何接口。

仅在需要时使用接口。
也就是说:当您想要对某个抽象有不同的实现时


将来,如果为特定类提供一个接口(例如,您希望为同一概念提供另一个实现),那么您总是可以从现有类创建接口。()

这再一次归结到他所说的“界面”的意思。接口和接口这两个术语之间存在一些歧义。当使用术语接口时,它表示没有方法声明的对象。当使用术语接口时,它意味着您使用一组预定义的函数(无论它们是否被实现),并在必要时用您的逻辑覆盖它们。例如:

抽象类动物
狗类动物

在本例中,Animal==狗的接口(或合同)

界面可测量
班级杯


在这种情况下,当您进行单元测试时,接口变得更为必要,但这完全取决于您的开发环境。正如Mark所说,接口就是合同,实现它会迫使您遵守该合同的“规则”

如果您正试图强制执行某些方法的实现,那么使用接口就是最好的选择

这里有一些很好的例子:


    • 您可能并不总是想要一个接口。考虑你可以和代表一起完成类似的任务。在Java中,我为多线程应用程序使用了可运行接口。现在我在.NET中编程,我非常依赖代理来完成我的多线程应用程序。本文帮助解释委托与接口的需要

      委托提供了更多的灵活性,因为在Java中,我发现我在C中使用函数指针完成的任何任务现在都需要使用接口进行度量

      虽然,接口有很多情况。考虑,它的设计是为了让您迭代各种集合,而不需要了解底层代码是如何工作的。当您需要将一个类交换为另一个类,但需要类似的接口时,接口非常适合。ICollection和IList提供了一组类似的功能来完成对集合的操作,而不必担心细节


      如果您想更好地理解接口,我建议您阅读。

      一个类不应该实现接口,除非您想告诉程序的其他部分-“这个类可以做这些事情(但不指定它是如何做的)。
      您想什么时候这样做?
      例如,假设你有一个游戏,游戏中有动物。。并说,每当动物看到人类时,它就会发出声音(无论是吠叫、咆哮等)。
      如果所有动物都将实现接口IMakeSound,其中有一个名为MakeSound的方法,那么您就不必关心应该发出声音的是哪种动物。。你所要做的就是使用动物的“IMakeSound”部分,并调用它的方法。

      我应该补充一点,当一个人在类声明中读到它实现了某个接口时,它会告诉他很多关于该类的信息,这是另一个好处。

      接口,这里指的是代码构造而不是设计抽象,支持一种称为“松耦合”的代码设计基本原则。还有一些更衍生的原则告诉您代码应该如何松散耦合,但总的来说,松散耦合有助于允许对代码的更改影响尽可能小的代码库区域

      例如,考虑一些任意复杂度的计算。此计算由6个不同的类使用,因此为了避免重复代码,计算被封装在自己的类Calculator中。这6个类各自包含对计算器的引用。现在,假设您的客户来找您,并说在一次使用计算器时,如果满足某些条件,则应使用不同的计算。您可能很想简单地将这两个规则(使用规则和业务规则)和新的计算算法放入Calculator类中,但是如果您这样做,那么将发生两件事;首先,让计算器知道一些超出其范围的实现细节(如何使用),它不需要知道,以后可能会再次更改。其次,其他5个使用Calculator的类(工作正常)必须重新编译,因为它们引用了更改的类,并且必须进行测试,以确保您不会因为更改第6个类的类而破坏它们的功能

      对此的“适当”解决方案是一个接口。通过定义一个接口ICalculator,它公开了其他类调用的方法,您打破了6个类对特定类计算器的具体依赖。现在,6个类中的每一个都可以有一个re