私はジェネリックインターフェイスIComparison
を実装しているVisual Studio 2008 C#2.0 CFプロジェクトを持っています。 IComparison.Compare
メソッドは、指定されたオブジェクトに対して有効な任意の型の比較を行うために呼び出すことができます。したがって、型制約を入れたくありません。タイプ制約を持つジェネリックインターフェイスを実装する
public interface IComparison<EXPECTED_PARAM>
{
Result Compare<RETURNED_PARAM>(RETURNED_PARAM returned);
}
しかし、実装は、より具体的にすることができます。この場合、GreaterThan.Compare
に与えられたパラメータは、System.IComparable
によってコンストラクタで与えられたEXPECTED_PARAM
と比較することができます。
public class GreaterThan<EXPECTED_PARAM> : IComparison<EXPECTED_PARAM>
{
private EXPECTED_PARAM expected_;
public GreaterThan(EXPECTED_PARAM expected)
{
expected_ = expected;
}
public Result Compare<RETURNED_PARAM>(RETURNED_PARAM returned)
where RETURNED_PARAM : IComparable<EXPECTED_PARAM>
{
return ((returned == null && expected_ == null) ||
(returned != null && returned.CompareTo(expected_) > 0)) ?
Result.Fail : Result.Pass;
}
}
残念ながら、これは私にエラーを与える:
error CS0460: Constraints for override and explicit interface implementation methods are inherited from the base method, so they cannot be specified directly
私はRETURNED_PARAM
オブジェクトとEXPECTED_PARAM
オブジェクトの任意の比較を実行する能力を得るために行うために何が必要ですか?これについて
おかげで、 PaulH
これはおそらく私がしなければならないことです。私が好きでないのは、 'Compare'が呼び出されるまで' RETURNED_PARAM'型を知る必要がなかったことだけです。このために、私は両方の型を構築時に知る必要があります。ありがとう! – PaulH
問題がなければ答えを受け入れることができます。ありがとう:) – boca