我有一個看起來像這樣的抽象類,例如:
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”)之一我有這 3 個不同的課程。
所以,每當我呼叫這 3 個類中的一些時,我可以覆寫方法“Fun1”和“Fun2”,但我總是可以在這 3 個類中的任何一個中使用方法“Func”。
我怎么能那樣做?
uj5u.com熱心網友回復:
正如其他人所說,您可以使用介面或通用基類來完成此操作。但為了完整性:您也可以使用泛型:
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);
}
uj5u.com熱心網友回復:
如果您只想使用一個類而不是三個類,您可以創建一個基類或介面,并將相同的行為放入這個新創建的抽象類中。然后在你的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();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/475579.html
