Interface & Base Abstract Class c#
定义一个接口,在一个基本抽象类中实现接口,给它默认的行为,然后从基类继承,这是一个好的实践吗?
或者是过度杀人?
使用接口或抽象类是两个完全不同的问题。可能两者的答案都是肯定的,但一方与另一方毫无关系。
除非你绝对确定你需要从一个基类继承并共享某些方法的多个类,否则我不会预先计划使用继承。当我们开始设想一个完美的教科书课程层次结构时,它往往会变得复杂而不可行。当您重构或者发现自己编写了一个类似的类并且不想复制代码时,这通常更有意义。
编写一个接口,然后实现它是一个很好的实践,例如,当您正在创建另一个类将依赖的东西时(这是非常常见的),如果您知道您的类将依赖于另一个"做某事"的类,那么您可以暂时停止在第一个类上的工作,以编写
只是举例说明一下。假设我正在编写一个类,它提供一个
1 2 3 4 5 6 7 8 | public class MenuProvider { public Menu GetMenu(string menuId) { //code that gets the menu return menu; } } |
然后我意识到在退回某些菜单项之前,我需要过滤掉它们。这可能基于配置设置、特定用户或任何其他设置。
我可以写这个接口:
1 2 3 4 | public interface IMenuFilter { void FilterMenu(Menu menu); } |
然后像这样修改我的原始类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class MenuProvider { private readonly IMenuFilter _menuFilter; public MenuProvider(IMenuFilter menuFilter) { _menuFilter = menuFilter; } public Menu GetMenu(string menuId) { //code that gets the menu //filter the menu _menuFilter.FilterMenu(menu); return menu; } } |
我不知道
您是否有希望在此接口实现之间共享的公共功能?如果是,那么创建一个抽象基类。否则,现在别担心。您可以稍后添加一个。但编程到接口几乎总是一个好主意。
通常,您将使用接口或继承。我通常不会在同一个班上同时使用这两种语言。
要从基类继承功能时,请使用继承。
当您希望不同的类实现一些相同的核心功能,但不一定共享代码时,可以使用接口。