gpt4 book ai didi

c# - 针对接口(interface)编程而不是实现混淆

转载 作者:太空宇宙 更新时间:2023-11-03 17:21:34 26 4
gpt4 key购买 nike

我正在努力养成针对接口(interface)而不是实现进行编码的习惯,虽然在大多数情况下我都能理解其中的原因,但也有一些地方让我很吃力。

以这个非常简单的例子为例:

public interface IAuditLog
{
void AddLog(string log);
}

public class AuditLog : IAuditLog
{
public void AddLog(string log)
{
//implementation
}
}

调用审计日志类:

public partial class AuditLogPage : System.Web.UI.Page
{
protected void btnAddLog_Click(object sender, EventArgs e)
{
IAuditLog objAuditLog = new AuditLog();
objAuditLog.AddLog("test log");
}
}

实例化的时候还要用AuditLog,有什么意义呢?如果 AddLog 方法签名发生变化,我仍然需要检查所有使用它的页面并修改代码。我错过了重点吗?

提前感谢您的帮助,威尔基。

最佳答案

在示例中,如果您切换出 FileAuditLogger()DatabaseAuditLogger()EventLogAuditLogger()您可以切换实现而无需重写代码。

通常,您会使用 IoC 容器(Autofac、StructureMap、Unity 等)来自动连接对象实例化。所以不要调用 new AuditLog()你会调用IoC.Container.Resolve<IAuditLog>()

如果您想了解更多信息,请告诉我。

关于c# - 针对接口(interface)编程而不是实现混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11260612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com