如何在类
LimitsPassed
中指定SpecificResult
函数的参数类型?
显然,此处显示的代码无法编译,因为派生类中的类型与基类定义不匹配。
有哪些可能的解决方案?
public abstract class Result
{
public abstract bool LimitsPassed(Limits limits)
}
public class SpecificResult : Result
{
public override bool LimitsPassed(SpecificLimits limits)
{
//specify parameter base type to particular type of derived class
}
}
public abstract class Limits
{
}
public class SpecificLimits : Limits
{
}
您有几个选择。也许您想指定所有实现
LimitsPassed
的派生类都使用从类 Limits
派生的参数。
示例:
public abstract class Result
{
public abstract bool LimitsPassed<T>(T limits) where T:Limits;
}
public class SpecificResult : Result
{
public override bool LimitsPassed<T>(T limits)
{
throw new NotImplementedException();
}
}
public abstract class Limits
{
}
public class SpecificLimits : Limits
{
}
另一个选项是传递给
LimitsPassed
的对象在逻辑上是否具有一致的契约,在这种情况下,您可以采用基于接口的方法。
示例:
public abstract class Result
{
public abstract bool LimitsPassed(ILimits limits);
}
public class SpecificResult : Result
{
public override bool LimitsPassed(ILimits limits)
{
//specify parameter base type to particular type of derived class
}
}
public interface ILimits
{
}
public class SpecificLimits : ILimits
{
}