实现接口的好处

DNR*_*DNR 15 c# interface

在C#3.5中实现接口有什么好处?

Meh*_*ari 26

您将能够将对象传递给期望接口作为参数的方法(或满足类型约束).C#不支持" 鸭子打字".只需编写接口定义的方法,该对象就不会自动与接口类型"兼容":

public void PrintCollection<T>(IEnumerable<T> collection) {
    foreach (var x in collection)
       Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)

如果List<T>没有实现IEnumerable<T>接口,则无法将其作为PrintCollection方法的参数传递(即使它有GetEnumerator方法).

基本上,接口声明合同.实现接口会强制您的类绑定到合同(通过提供适当的成员).因此,依赖于该合同的一切(依赖于由对象提供的接口指定的功能的方法)也可以与您的对象一起使用.


Jor*_*oba 17

主要好处是代码可读性,代码可维护性和代码"语义".

  • 代码可读性:界面构成关于意图的声明.它定义了您的班级的能力,您的班级能够做什么.如果您实现了ISortable,那么您明确表示您的类可以进行排序,对于IRenderable或IConvertible也是如此.
  • 代码语义:通过提供接口并实现它们,您可以像HTML和CSS那样以类似的方式主动分离概念.类是"对象类"的具体实现,通过对现实生活对象或概念的一般属性进行建模来表示现实.接口定义行为模型,定义对象可以做什么.分离这些概念可以使代码的语义更加清晰.这样一些方法可能需要一个动物类的实例,而其他方法可以接受你抛出的任何对象,只要它支持"行走".
  • 代码可维护性:接口有助于减少耦合,因此允许您轻松地交换相同概念的实现,而不会影响底层代码.您可以通过定义实现接口的新类来轻松更改IMessage的实现.将其与sessically替换从CMessage到CMyNewMessageClass的所有引用进行比较.


Dan*_*ott 12

当你尝试:

  • 使用Stubs/Mocks进行单元测试
  • 实现依赖注入
  • 解决世界饥饿问题(尽管未经证实!)

善良,


小智 5

接口没有提供任何实际的优势。任何可以通过接口完成的事情都可以而且应该使用其他语言结构来完成。多重继承经常被认为是使用接口带来的唯一真正的好处,但我可以在 C# 中非常轻松、清晰地执行多重继承 - 我每天都这样做。在不“破坏”接口的情况下更改代码是所有借口中最愚蠢的……这适用于具体类,也适用于抽象类或接口。只要功能签名没有改变,你就没有破坏接口。在哪里宣布的并不重要。简单地把一个功能原型放在一个单独的文件中并在前面加上“I”命名并没有什么意义——除了你最终需要维护的源文件数量是原来的两倍之外。接口是早期定义的,然后维护契约的假设是荒谬的。接口方法及其参数一直在变化,因为一切都无法预先知道。这就是微软很久以前就停止使用它们的原因。他们有 IUnKnown、IUnknown2 等等。这造成了混乱。


小智 5

接口的主要好处主要与项目设计有关。

如果您使用接口:

  1. 接口的使用者应该实现该接口。
  2. 设计桥梁图案。
  3. 创建合同,以便用户必须遵守界面规则。
  4. 只能Object从主类中获取接口部分( )。
  5. 即使类是私有的,也可以从中获取接口对象
  6. 多重继承的风格。
  7. 不需要应该实施,简单地选择如果实施,这意味着如果你想要你可以实施其他方式可以放弃它。
  8. 更干净的代码。
  9. 依赖于类而改变的实现可以继续与接口一起进行。
  10. 如果每个类都有单独的方法实现,那么最好选择接口。例如IEnumerable在集合中。

根据 C# Architect 的说法,简单地说,它是一个契约。消费者必须遵守。