C# 实现接口的好处

C# 实现接口的好处,c#,interface,C#,Interface,在C#3.5中实现接口有什么好处?您将能够将对象传递给一个方法(或满足类型约束),该方法期望该接口作为参数。C#不支持“.”仅通过编写接口定义的方法,对象将不会自动与接口类型“兼容”: public void PrintCollection<T>(IEnumerable<T> collection) { foreach (var x in collection) Console.WriteLine(x); } public void打印集合(IEn

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

您将能够将对象传递给一个方法(或满足类型约束),该方法期望该接口作为参数。C#不支持“.”仅通过编写接口定义的方法,对象将不会自动与接口类型“兼容”:

public void PrintCollection<T>(IEnumerable<T> collection) {
    foreach (var x in collection)
       Console.WriteLine(x);
}
public void打印集合(IEnumerable集合){
foreach(集合中的变量x)
控制台写入线(x);
}
如果
List
没有实现
IEnumerable
接口,您将无法将其作为参数传递给
PrintCollection
方法(即使它有
GetEnumerator
方法)


基本上,接口声明了一个契约。实现接口将强制类绑定到契约(通过提供适当的成员)。因此,依赖于该契约(依赖于对象提供的接口指定的功能的方法)的所有内容也可以与对象一起使用。

当您尝试:

  • 使用存根/模拟进行单元测试
  • 实现依赖注入
  • 解决世界饥饿问题(尽管这尚未得到证实!)
善良


Dan

您与类继承无关-您可以将接口应用于任何类。任何类都可以有多个接口-C#不支持多类继承,即通过接口提供了良好的抽象层。主要好处在于代码可读性、代码可维护性和代码“语义”

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

    • 接口定义契约(对象能够做的事情),而具体类(或结构)定义具体行为


      例如,IList是一个接口,它定义了一个具体对象必须提供的方法,以便与实现IList的任何其他对象一样使用。在任何可以使用IList的地方,都可以使用实现IList的对象。具体实现它的方式以及调用这些IList方法时对象的行为方式由您决定。

      接口是引用类型,它只包含抽象成员。接口的成员可以是事件、方法、属性和索引器。但是接口只包含其成员的声明。任何实现都必须放在实现它们的类中。接口不能包含常量、数据字段、构造函数、析构函数和静态成员。接口内的所有成员声明都是隐式公开的

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

      < P>如果你在一个巨大的商业软件的房子里工作,你可能会考虑司法接口的使用。否则,你应该远离他们。多线程也一样。如果我再看到一个脚本kiddie应用程序产生20个线程来写“Hello World”,我会发疯的。多线程应该完全保留给需要它的应用程序,通常是在多处理环境中。90%的情况下,它弊大于利。而且不要为线程跳高/主题外的评论而烦恼。我不在乎。我做这件事的时间比你们大多数人都长。Rank有它的特权。

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

      如果使用接口:

    • 接口的使用者应该实现该接口
    • 设计桥型
    • 创建合同,以便用户必须遵守界面规则
    • 只能