在C#8中,Microsoft为接口方法引入了默认实现。它仍然是一个相当新的功能,似乎有许多相关的博客写此。
我想知道的是,默认实现是否有可能成为依赖倒置和DI的有用工具,或者它会促进不良的编程风格?它是否违反SOLID等任何众所周知的原则?
默认接口实现有两个主要设计目标。更重要的是一直回到有关设计接口的准则。特别是,一旦发布接口,就应该将其设置为固定状态,并且永远不要更改。问题是,这也是所有时间都忽略的规则。
第一个也是主要的实用程序是,默认接口实现允许您将新成员引入接口,而不会破坏与该(公共)接口的使用者的源代码或二进制兼容性。这仍然限制了您在更改公共界面时可以进行的更改的种类,而且还使客户端可以更轻松地使用新界面-升级是免费的,他们可以立即开始使用新功能。
第二个设计目标是一种扩展具有特征的类的方法-这种方法早已在游戏开发中使用。基本思想是,您可以通过使类实现一个接口来向其添加明确定义的新行为,同时还保留在类本身中修改行为的能力。这本质上是元编程的一种相对较弱的形式。
当然,仅因为这些是设计目标,并不意味着它们是应该使用默认实现的唯一方法。但是,如果概括一下,您将获得以下两个基本用途:
实际上,您甚至可以争辩说,这比类继承既简单,清晰又强大。在某种程度上,这是从扩展方法开始的方法的延续-本质上,默认接口方法实现是一种扩展方法,它也是虚拟的。默认实现只能与公共接口一起使用,但是实现类也可以使用其自己的隐藏状态。它为C#提供了有限的多重继承形式,而不必处理两个“父”的状态如何结合在一起(因为接口没有任何状态)。
最后,如果您担心诸如SOLID之类的原则,那就让我们开始吧:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句