c# - 实现具有类型约束的通用接口(interface)

标签 c# generics c#-2.0 type-constraints

我有一个 Visual Studio 2008 C# 2.0 CF 项目,我正在其中实现一个通用接口(interface) IComparison。可以调用 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

我需要做什么才能获得对 EXPECTED_PARAM 对象与 RETURNED_PARAM 对象执行任意比较的能力?

谢谢, 保罗H

最佳答案

这个怎么样?

    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;
    }
} 

关于c# - 实现具有类型约束的通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428581/

相关文章:

Java 泛型 - 方法参数

configuration - 通过配置管理器从 AppSettings 中获取 StringCollection

c# - 如何在 C# 中将 List<byte> 转换为 byte[]?

c# - 从多个类访问串口

c# - 使用 MEF 从 shell 加载 Prism 模块 View

c# - asp.net c# 从查询字符串中解析数字和日期时间的更好方法然后尝试/捕获

c# - 如何基于简单的多边形绘制图像?

c# - 通用显式转换失败 C#

localhost - MSMQ - 资源不足,无法执行操作

haskell - 与 GHC.Generics 类型不匹配