我有一个抽象类,看起来像这样,例如:
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);
}