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); } }
どちらの場合も、デフォルト引数を持つ関数が実装されていないことがわかりました。そのような種類の強化を行う正しい方法は何ですか?