gpt4 book ai didi

c#:扩展接口(interface)的功能,使其向后兼容

转载 作者:行者123 更新时间:2023-11-30 19:42:12 27 4
gpt4 key购买 nike

我有一个名为 IEvaluator 的接口(interface)作为我创建的库的一部分。

public interface IEvaluator<T>
{
public bool Evaluate<T>(T key, T value);
}

之前用来判断key是否等于value。现在,我想在其中添加对更多运算符的支持,比如小于、大于等,同时保持向后兼容,即只有那些想要扩展支持的人应该更新他们的代码,而不是其他人。我知道 .NET 提供了一个名为 IComparer<T> 的类似接口(interface)但在这里使用它不是一个选项。

我尝试了一些尝试,但没有一个似乎有效

  • 将运算符作为默认参数。

    public interface IEvaluator<T>
    {
    public bool Evaluate<T>(T key, T value, string operatorVal = "=");
    }
  • 在接口(interface)中添加一个新方法并使用扩展方法提供其实现。

    public interface IEvaluator<T>
    {
    public bool Evaluate<T>(T key, T value);
    public bool Evaluate<T>(T key, T value, string operatorVal = "=");
    }

    public static class ExtensionMethods
    {
    public static bool Evaluate<T>(this.IEvaluator evaluator, T key, T value, string operatorVal = "=")
    {
    return evaluator.Evaluate(key, values);
    }
    }

在这两种情况下,我都知道带有默认参数的函数没有实现。进行此类增强的正确方法是什么?

最佳答案

基本上,你不能。如果有人实现了原始接口(interface),他们的代码不会暴露任何使用其他运算符的方式...因此您不能在不破坏他们的代码的情况下暴露额外的方法。

一个选择是创建一个扩展旧接口(interface)的接口(interface):

public interface IFlexibleEvaluator<T> : IEvaluator<T>
{
bool Evaluate<T>(T key, T value, string operatorVal);
}

然后实现可以在空闲时添加支持。他们可以自己执行“默认相等”部分。

关于c#:扩展接口(interface)的功能,使其向后兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17828319/

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