c# - 基于接口(interface)的编程,我做对了吗?

标签 c# .net interface

好的,所以我决定开始在我的代码库中使用接口(interface),这对于某些任务来说效果很好。例如,我有一个实现 IUrlBuilder 的 URL 构建器类,现在实现并不重要。很棒,但以这个界面为例。

namespace SproutMessagingFramework.Webtext.Interfaces
{
using System.Net;

public interface ICookieJar
{
    CookieCollection Collection { get; set; }
    CookieContainer Container { get; set; }

    void AddResponse(HttpWebResponse Response);
    void AddResponse(HttpWebResponse Response, string Path, string Domain);
}
}

在我看来,这个接口(interface)非常具体,除了具体类已经在做的事情之外,这两个方法不会做太多其他事情。那我为什么要把它做成一个接口(interface)呢?那么我的想法是,如果我需要更改 AddResponse 的实现怎么办?

这是正确的还是我只是在膨胀代码库?

最佳答案

接口(interface)可以设计为与特定类一一对应。这允许(除其他事项外)与模拟框架集成,您可以在其中用假装的 cookie jar 替换真实的 cookie jar,同时在测试环境中验证 cookie monster 的行为。

然而,更常见的是,接口(interface)定义类功能的一个子集,并且通常可以在目的上与类本身正交。正交接口(interface)的一个很好的例子是 IDisposable。当一个类想要支持对非托管资源(如套接字、文件描述符等)的干净回收时,它会实现 IDisposable,尽管资源清理并不是该类的真正设计目的。

另一个常见的用途是提供一个统一的容器模型,比如ICollection和IEnumerable。

最后,类通常会实现多个接口(interface),通常对应于它们功能的正交截面。

关于c# - 基于接口(interface)的编程,我做对了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303785/

相关文章:

java - 如何确保使用接口(interface)实现公共(public)静态函数

c# - ffmpeg 无法识别

c# - ASP.NET C# MVC 将值从 Controller 传递到 cshtml

c# - 如何在不使用 SendMessage 的情况下将 "Message"发送到 .Net 中的另一个进程?

c# - 商业 WPF 应用程序的映射

java - 当我将 lambda 表达式作为参数传递时,它怎么可能访问此范围内的其他变量?

c# - 努力理解 Xamarin 异常处理

c# selenium chrome-webdriver 使用类和标题单击按钮

c# - Socket.Send 和 Receive.. 我该如何继续?

c# - 从线程中的类访问动态控制