c#:扩展接口的功能,使其向后兼容
本文关键字:扩展 接口 功能 | 更新日期: 2023-09-27 18:24:32
作为我创建的库的一部分,我有一个名为IEvaluator
的接口。
public interface IEvaluator<T>
{
public bool Evaluate<T>(T key, T value);
}
早期它用于评估键是否等于值。现在,我想添加对更多操作符的支持,比如小于、大于等,同时保持向后兼容,即只有那些想要扩展支持的人才应该更新他们的代码,而不是其他人。我知道.NET提供了一个名为IComparer<T>
的类似接口,但在这里不能使用它。
我尝试了几种方法,但似乎都不起作用
将运算符作为默认参数。
public interface IEvaluator<T> { public bool Evaluate<T>(T key, T value, string operatorVal = "="); }
在接口中添加一个新方法,并使用扩展方法提供其实现。
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); } }
在这两种情况下,我都知道带有默认参数的函数没有实现。做这种增强的正确方法是什么?
基本上你做不到。如果有人实现了原始接口,他们的代码不会公开任何使用其他运算符的方式。。。因此,您不能在不破坏代码的情况下公开额外的方法。
一种选择是创建一个新的接口,该接口扩展了旧接口:
public interface IFlexibleEvaluator<T> : IEvaluator<T>
{
bool Evaluate<T>(T key, T value, string operatorVal);
}
然后,实现可以在空闲时添加支持。他们可以自己执行"默认平等"部分。