如何在重写抽象函数时将参数类型指定为派生类类型,其中参数是基类的类型?

问题描述 投票:0回答:1

如何在类

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
{
}
c# inheritance abstract
1个回答
0
投票

您有几个选择。也许您想指定所有实现

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
    {

    }
© www.soinside.com 2019 - 2024. All rights reserved.