C# 使用类型约束实现泛型接口

C# 使用类型约束实现泛型接口,c#,generics,c#-2.0,type-constraints,C#,Generics,C# 2.0,Type Constraints,我有一个VisualStudio2008C#2.0CF项目,我正在其中实现一个通用接口,IComparison。可以调用IComparison.Compare方法来执行对指定对象有效的任何类型的比较,因此我不想对其设置类型约束 public interface IComparison<EXPECTED_PARAM> { Result Compare<RETURNED_PARAM>(RETURNED_PARAM returned); } 不幸的是,这给了我一个错误

我有一个VisualStudio2008C#2.0CF项目,我正在其中实现一个通用接口,
IComparison
。可以调用
IComparison.Compare
方法来执行对指定对象有效的任何类型的比较,因此我不想对其设置类型约束

public interface IComparison<EXPECTED_PARAM>
{
    Result Compare<RETURNED_PARAM>(RETURNED_PARAM returned);
}
不幸的是,这给了我一个错误:

error CS0460: Constraints for override and explicit interface implementation methods are inherited from the base method, so they cannot be specified directly
我需要做什么才能使
预期参数
对象与
返回参数
对象执行任意比较

谢谢, 保罗

这个怎么样

    public interface IComparison<EXPECTED_PARAM, RETURNED_PARAM>
{
    Result Compare(RETURNED_PARAM returned);
}

public class GreaterThan<EXPECTED_PARAM, RETURNED_PARAM> : IComparison<EXPECTED_PARAM, RETURNED_PARAM> where RETURNED_PARAM : IComparable<EXPECTED_PARAM>
{
    private EXPECTED_PARAM expected_;      
    public GreaterThan(EXPECTED_PARAM expected)     
    {         expected_ = expected;     }      

    public Result Compare(RETURNED_PARAM returned)          
    {
        return ((returned == null && expected_ == null) || 
            (returned != null && returned.CompareTo( expected_ ) > 0)) ?                
            Result.Fail : Result.Pass;
    }
} 
公共接口i比较
{
结果比较(返回\返回参数);
}
返回的公共类大于:IComparison_参数:IComparable
{
私有预期参数预期参数;
公共大于(应为参数)
{应为\=应为;}
公共结果比较(返回的参数)
{
return((returned==null&&expected==null)|
(返回!=null&&returned.CompareTo(预期值大于0))?
结果.失败:结果.通过;
}
} 

您的继承层次结构就是问题所在
GreaterThan
继承自
IComparison
,这意味着您告诉编译器它实现了
Compare
,但您希望它实现
Compare
。您可以在界面上删除通用约束:

public interface IComparison
{
    Result Compare<RETURNED_PARAM>(RETURNED_PARAM returned)
    where RETURNED_PARAM : IComparable;
}

public class GreaterThan<EXPECTED_PARAM>: IComparison
{
    private EXPECTED_PARAM expected_;

    public GreaterThan(EXPECTED_PARAM expected)
    {
        expected_ = expected;
    }

    public Result Compare<RETURNED_PARAM>(RETURNED_PARAM returned) 
        where RETURNED_PARAM : IComparable
    {
        return ((returned == null && expected_ == null) ||
                (returned != null && returned.CompareTo( expected_ ) > 0)) ?
               Result.Fail : Result.Pass;
    }
}
公共接口i比较
{
结果比较(返回的参数)
返回的参数:i可比较;
}
公共类大于:i比较
{
私有预期参数预期参数;
公共大于(应为参数)
{
预期的,预期的;
}
公共结果比较(返回的参数)
返回的位置参数:i可比较
{
return((returned==null&&expected==null)||
(返回!=null&&returned.CompareTo(预期值大于0))?
结果.失败:结果.通过;
}
}

这可能就是我必须要做的。我唯一不喜欢的是,在调用
Compare
之前,我不必知道
返回的参数类型。为此,我必须在施工时了解这两种类型。谢谢如果我从
IComparison
接口中删除类型约束,那么我会得到
错误CS0460:覆盖和显式接口实现方法的约束继承自基本方法,因此不能直接指定它们。另外,我更喜欢通用的
IComparable
接口,以避免装箱/拆箱。@PaulH我刚刚(重新)测试了我的示例代码,它可以编译。你的和我的看起来有什么不同吗?是的,它是按照发布的方式编译的,但是你提到了从
IComparison.Compare
界面中删除泛型约束。如果我在返回的_PARAM:IComparable
中删除该
,则它不会编译。
public interface IComparison
{
    Result Compare<RETURNED_PARAM>(RETURNED_PARAM returned)
    where RETURNED_PARAM : IComparable;
}

public class GreaterThan<EXPECTED_PARAM>: IComparison
{
    private EXPECTED_PARAM expected_;

    public GreaterThan(EXPECTED_PARAM expected)
    {
        expected_ = expected;
    }

    public Result Compare<RETURNED_PARAM>(RETURNED_PARAM returned) 
        where RETURNED_PARAM : IComparable
    {
        return ((returned == null && expected_ == null) ||
                (returned != null && returned.CompareTo( expected_ ) > 0)) ?
               Result.Fail : Result.Pass;
    }
}