C# 使用类型约束实现泛型接口
我有一个VisualStudio2008C#2.0CF项目,我正在其中实现一个通用接口,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); } 不幸的是,这给了我一个错误
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;
}
}