c#中带有更多参数的子类方法的OOP设计

本文关键字:类方法 OOP 设计 参数 | 更新日期: 2023-09-27 18:13:24

假设我有这两个类:

public class Threshold {
    int min;
    int max;
    public virtual int calculate(int min, int max)
    {
        //calculate basic Threshold        
    }        
}

public class AdvancedThreshold : Threshold {
    int min;
    int max;
    int extra;
    public override int calculate(int min, int max, int extra)
    {
        //calculate Advanced Threshold        
    }
}

我不能这样做,因为基方法有两个参数,而子类方法有三个参数。

解决这个问题的最佳设计实践是什么?是否有可能使用多态对象?我需要使用复合对象而不是继承吗?

我在这里读过类似我的问题https://stackoverflow.com/a/56904/3032175

但我真的不明白解决办法。谢谢你!

c#中带有更多参数的子类方法的OOP设计

不确定您想要实现什么,但您可能需要重新考虑设计。似乎min/max/extra的值不应该传递给Calculate方法,而应该设置为属性或在构造函数中传递。

public class Threshold
{
    public int Min { get; set; }
    public int Max { get; set; }
    public virtual int Calculate( int input )
    {
        // logic goes here
    }
}
public class AdvancedThreshold : Threshold
{
    public int Extra { get; set; }
    public override int Calculate( int input )
    {
        // advanced logic goes here
    }
}

当您从一个类继承时,您不能更改需要为这些方法提供实现的方法。但是你可以添加新的方法。

有几个方法可以达到你想要的

您为

方法提供了两个重载
public virtual int calculate(int min, int max){}
public virtual int calculate(int min, int max,int extra){}

或者你可以用一个来实现另一个

public override int calculate(int min, int max)
{
   calculate(min,max,extra)
}
public  int calculate(int min, int max, int extra){}