c# - 接口(interface)变量声明

标签 c# asp.net .net visual-studio interface

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/

相关文章:

c# - 无法使用 CSS 选择器定位链接

C# - 数组转置位级别

c# - 如何在 .NET Core 中获取操作系统、计算机处理器信息、总 RAM、正在使用的 RAM 等?

c# - 使用 Linq 解析分段的 XML 字符串

c# - 返回具有空值的类

asp.net - 使用 WebAPI 时重新验证模型(TryValidateModel 等效项)

c# - 如何删除刚刚上传到服务器但仍被服务器锁定的文件?

asp.net - 强制客户端忽略 PDF.js 的服务器端解决方法(Firefox 的内置查看器以 .aspx 扩展名保存)

c# - 将本地化资源 .DLL 嵌入到 C# 中的可执行文件中?

c# - Entity Framework `AsNoTracking` 不适用于匿名投影