gpt4 book ai didi

c# - 当其中一个实现需要更多数据时该怎么办

转载 作者:太空宇宙 更新时间:2023-11-03 19:42:02 25 4
gpt4 key购买 nike

我在想处理这种情况的正确方法是什么:我有一个如下所示的接口(interface) IService:

class Configuration
{
public int Min { get; set; }
public int Max { get; set; }
}

interface IService
{
int Calculate(int userId, Configuration configuration)
}

比方说,我有 5 个实现此接口(interface)的类,它们运行良好。有一天我必须实现第 6 个服务,但这个服务有点不同。为了完成它的工作,新服务需要这样的配置:

class ExtendedConfiguration : Configuration
{
public string Filter { get; set; }
}

我的新服务可能如下所示:

class NewService : IService
{
public int Calculate(int userId, Configuration configuration)
{
var extendedConfig = configuration as ExtendedConfiguration;
//Calculating and returning result using extendedConfig...
}
}

好像没问题,服务可以用。但是,我不喜欢这样一个事实,即 Calculate 方法签名需要 Configuration 对象,而实际上需要 ExtendedConfiguration - 否则它将无法进行计算(并会抛出异常)。

有没有更好的方法来编写这段代码?

最佳答案

that Calculate method signature requires Configuration object, while in reality ExtendedConfiguration is needed

如前所述,您可以针对限制问题寻求通用解决方案。使用通用参数定义接口(interface)并将其约束为 Configuration 类型:

interface IService<T> where T : Configuration
{
int Calculate(int userId, T configuration)
}

那么您的旧服务可能仍然像以前一样:

class OldService : IService<Configuration>
{
public int Calculate(int userId, Configuration configuration)
{
return (configuration.Min + configuration.Max) * 2;
}
}

并且在 NewService 中,您可以指定输入参数必须是 ExtendedConfiguration 类型:

class NewService : IService<ExtendedConfiguration>
{
public int Calculate(int userId, ExtendedConfiguration configuration)
{
string accessHereTheExtendedVersion = configuration.Filter;
return (configuration.Min + configuration.Max) / 2;
}
}

这不是您确切问题的真正答案:

Is there a better way of writing this code?

但解决这个问题的方法不同。它是否适合您的上下文和情况,您必须对其进行测试。

关于c# - 当其中一个实现需要更多数据时该怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52160933/

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