具有更多参数的 C# 子类方法中的 OOP 设计
OOP Design in C# subclass method with more parameters
假设我有这两个 类:
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
}
}
我不能这样做,因为基类方法有两个参数,而子类方法有三个参数。
解决这个问题的最佳设计实践是什么?是否可以使用多态对象?我需要使用复合对象而不是继承吗?
我在这里读到了与我的问题类似的内容
但是我不太明白解决办法。谢谢你。
当您从 class 继承时,您无法更改为 methods.However 提供实现所需的方法,您可以添加新方法。
有几种方法可以达到你想要的效果
您为方法提供了两个重载
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){}
不确定您要实现的目标,但您可能需要重新考虑设计。 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 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
}
}
我不能这样做,因为基类方法有两个参数,而子类方法有三个参数。
解决这个问题的最佳设计实践是什么?是否可以使用多态对象?我需要使用复合对象而不是继承吗?
我在这里读到了与我的问题类似的内容
但是我不太明白解决办法。谢谢你。
当您从 class 继承时,您无法更改为 methods.However 提供实现所需的方法,您可以添加新方法。
有几种方法可以达到你想要的效果
您为方法提供了两个重载
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){}
不确定您要实现的目标,但您可能需要重新考虑设计。 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
}
}