gpt4 book ai didi

c# - 针对只有一个类实现所述接口(interface)的接口(interface)进行编程

转载 作者:行者123 更新时间:2023-11-30 13:15:39 25 4
gpt4 key购买 nike

我能理解为什么要针对接口(interface)而不是实现进行编程。但是,在如下示例中(我发现很多):

public interface ISomething
{
void BlahOne(int foo);
void BlahTwo(string foo);
}

public class BaseSomething : ISomething
{
public void BlahOne(int foo)
{
//impl
}

public void BlahTwo(string foo)
{
//impl
}
}

public class SpecificSomethingOne : BaseSomething
{
public void SpecificOne()
{
//blah
}
}

public class SpecificSomethingTwo : BaseSomething
//and on..

当前的例子是我的游戏中基于组件的实体系统。 (我有 IComponent、Component、PosComponent 等)。

但是,我看不出拥有 ISomething 的理由。这个名字可能看起来更好,但它似乎没有目的。我可以一直返回 BaseSomething。

当你只有一个基本实现时,是否有理由拥有一个接口(interface)? (我可以看到 IComparable 或 IEnumerable 的用法)

编辑:对于稍微不同的场景(但仍然足够相关,不需要不同的问题),如果我假设我对所有内容都有这种结构,那么如果我使用 ISomething 会有很大的不同吗> 参数类型和变量与 BaseSomething 相比?

最佳答案

我更喜欢“惰性设计”——在需要时从 BaseSomething 中提取接口(interface)。在那之前,保持简单并跳过它。

现在我能想到在只有一个实现时使用接口(interface)的两个原因:

  • 还有另一个用于单元测试的模拟实现(即有第二个实现,尽管不在生产代码中)。
  • 接口(interface)和实现在不同的类库中定义。例如。当使用模型- View -Presenter 模式时, View 可以驻留在一个 .exe 项目中,该项目依赖于实现 Presenter 的 .dll。然后可以将 IView 接口(interface)放入 .dll 中,并通过依赖注入(inject)提供演示者对 View 的引用。

关于c# - 针对只有一个类实现所述接口(interface)的接口(interface)进行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088309/

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