我在一家公司工作,有些人要求在我们的代码中使用接口(Visual Studio C#3.5).
我想要求Iron Clad推理接口是必需的.(我的目标是证明接口是编程的正常部分.)
我不需要说服,我只需要一个好的论据来用于说服别人.
我正在寻找的那种论点是基于事实的,而不是基于比较的(即"因为.NET库使用它们"是基于比较的.)
因此,针对它们的论点是:如果一个类被正确设置(具有其公共和私有成员),那么接口只是额外的开销,因为使用该类的那些仅限于公共成员.如果您需要一个由多于一个类实现的接口,那么只需设置继承/多态.
代码解耦.通过对接口进行编程,可以使用接口与实现接口的代码将代码分离.这允许您更改实现,而无需使用它重构所有代码.这与继承/多态相结合,允许您交替使用任何可能的实现.
模拟和单元测试.当方法是虚拟的时,模拟框架最容易使用,默认情况下,这些方法是通过接口获得的.这实际上是我创建界面的最大原因.
定义可能适用于允许它们互换使用的许多不同类的行为,即使类之间没有关系(定义的行为除外).例如,Horse和Bicycle类都可以使用Ride方法.您可以定义定义Ride行为的接口IRideable,并且使用此行为的任何类都可以使用Horse或Bicycle对象,而不会强制它们之间的不自然继承.
因此,针对它们的论点是:如果一个类被正确设置(具有其公共和私有成员),那么接口只是额外的开销,因为使用该类的那些仅限于公共成员.如果您需要一个由多于一个类实现的接口,那么只需设置继承/多态.
请考虑以下代码:
interface ICrushable { void Crush(); } public class Vehicle { } public class Animal { } public class Car : Vehicle, ICrushable { public void Crush() { Console.WriteLine( "Crrrrrassssh" ); } } public class Gorilla : Animal, ICrushable { public void Crush() { Console.WriteLine( "Sqqqquuuuish" ); } }
建立一个将动物与车辆联系起来的阶级等级是否有任何意义,即使两者都被我的巨型破碎机压碎了?没有.
除了在其他答案中解释的内容之外,interfaces
允许您在.NET中模拟多重继承,否则不允许.
有人说,唉
技术由两类人主导:那些理解他们不管理的人,以及管理他们不理解的人.
启用类的单元测试.
要有效地跟踪依赖关系(如果未检出并触摸接口,则只能更改类的语义).
因为没有运行时开销.
启用依赖项注入.
...也许是因为它是'2009年,而不是70年代',而现代语言设计师实际上对他们正在做的事情有一定的线索?
并不是每个类接口都应该抛出接口:只是那些对系统至关重要的接口,并且可能会遇到重大的变化和/或扩展.