如何在抽象类中定义不同类作为输入参数的方法?



我有一个抽象类,看起来像这样,例如:

public abstract class CPD 
{
public double[,] Func(double[] data, double value, SomeClass item) 
{
// Some code
}
public abstract double[] Fun1(double x);
public abstract void Fun2(double x);

}

我也有3个不同的类,有不同的构造函数,函数等。我想以某种方式定义我的方法func_;这是在代码中,能够使用作为输入参数(而不是"SomeClass")这三个不同的类之一,我有。

因此,无论何时我调用这三个类中的任何一个,我都可以重写方法&;fun1 &;和"Fun2",但是我总是可以在这三个类中使用"Func"方法。

我怎么能那样做呢?

如果您只想使用一个类而不是三个类,您可以创建一个基类或接口,并将相同的行为放入这个新创建的抽象类中。然后在Func方法中调用它

例如,我们可以创建一个抽象类Display:
public abstract class Display 
{
public abstract string Show();
}

然后需要创建这个基类Display的具体实现:

public class SamsungDisplay : Display
{
public override string Show()
{
return "I am Samsung";
}
}
public abstract class SonyDisplay : Display
{
public override string Show()
{
return "I am Sony";
}
}
public abstract class DellDisplay : Display
{
public override string Show()
{
return "I am Dell";
}
}

,然后我们可以使用任何派生类来代替基类:

// Here you can pass SamsungDisplay, SonyDisplay or DellDisplay 
public void UseDisplay(Display display) 
{
display.Show();
}

正如其他人所说,您可以使用接口或公共基类来完成此操作。但是为了完整起见:你也可以使用泛型:

public class SomeClass
{
private static readonly Random Random = new Random();
public virtual double Get()
{
return Random.Next(100);
}
}
public class Class1 : SomeClass { }
public class Class2 : SomeClass { }
public class Class3 : SomeClass { }
public abstract class CPD
{
public double[,] Func<T>(double[] data, double value, T item)
where T : SomeClass
{
var doubles = new double[3, 4];
doubles[0, 0] = item.Get();
return doubles;
}
public abstract double[] Fun1(double x);
public abstract void Fun2(double x);
}

最新更新