gpt4 book ai didi

.net - 在接口(interface)中引用实现基类型

转载 作者:行者123 更新时间:2023-12-02 05:21:28 25 4
gpt4 key购买 nike

我面临着一个对我来说没有味道但让我停下来的设计决策。看看下面的代码示例:

public interface IGenerator
{
///<summary>
/// Combines two generators; performs magic as well
/// </summary>
BaseGenerator Combine(BaseGenerator next);

///<summary>
/// Does what a generator does.
/// </summary>
object GenerateLolKThx();
}

public abstract class BaseGenerator : IGenerator
{
///<summary>
/// Combines two generators; performs magic as well
/// </summary>
public BaseGenerator Combine(BaseGenerator next)
{
// do stuff that I really don't want implementors to try and do
// because its complex and can result in bad juju if done wrong
return SuperSecretCombine(this, next);
}

///<summary>
/// Does what a generator does.
/// </summary>
public abstract object GenerateLolKThx();

/* other base class methods */
}

我不想更详细地说明为什么我不想使用 Combine 方法信任实现者;足以说明它的复杂性。但是,我确实想尽我所能强制任何想要实现 IGenerator 的人扩展 BaseGenerator,因为这是正确组合两个生成器的唯一方法。这是由接口(interface)本身强制执行的。

我担心由于我在该接口(interface)中引用某个接口(interface)的实现而导致出现意外问题(由“气味”表示)。但我也知道这种事情在 CS 中并非闻所未闻,它本身也不是坏事(即描述 XSD 的 XML 模式和用它们编译的语言编写的语言编译器)。

最佳答案

I'm interested in reasons WHY this might be a code smell



这是我的答案:将接口(interface)与实现分离的目的之一(甚至可能是主要目的)是使为接口(interface)创建许多不同的实现成为可能。将接口(interface)绑定(bind)到特定的实现类会破坏这一点。

您实际上是在说-“此接口(interface)必须由 BaseGenerator 或其子类实现”,但是为什么要分开 IGenerator来自 BaseGenerator ?

关于.net - 在接口(interface)中引用实现基类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/428282/

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