IMytask
是接口(interface)
,有一些方法,Mytask
继承IMytask
为什么总是推荐使用下面一种方法来声明变量?
IMytask xyz = new Mytask();
你能帮我理解一下,这样做有什么用处和重要性吗?
最佳答案
它并不一定“重要”——接口(interface)完全有可能是不必要和多余的——而且它们也有可能是必要的。这是上下文相关的。我当然不会说这是默认/自动推荐的方法;我会用:
var xyz = new Mytask();
或
Mytask xyz = new();
其中任何一个都会留下xyz
类型为Mytask
,不是IMytask
.
接口(interface)将API与实现分开。这允许类型实现特定的 API,而不必共享任何类型的模型,或者允许使用者在不知道将使用哪些实际具体类型的情况下使用 API - 只是:它们提供什么 API .
例如,.NET 框架代码中的“排序”函数(List<T>
等)可能会使用 IComparable<T>
或IComparer<T>
API,但提供比较功能的类型通常位于您的代码中。框架无法了解您的代码,只能了解接口(interface)。
同样,接口(interface)可能使注入(inject)、模拟或测试代码变得更容易。
或者:它可能不会添加任何有用的东西!如果只有一种类型实现了接口(interface),并且使用代码可以轻松地直接使用该类型:接口(interface)可能有点过分了。
在“显式接口(interface)实现”方面还有一些侧面(它允许类型实现 API 的方法,而无需将它们放在该类型的公共(public)/默认 API 上)。再说一次,这是否重要:上下文。
关于c# - 接口(interface)变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74027010/