[問題] 請問這樣的繼承方法怎麼寫

作者: powerD (￾ ￾ ￾N￾N￾ ￾N￾ ￾)   2022-06-14 18:50:25
我原先有一種class, ex:
Class ToolA
{
public double CalToolData(double input, out double toolData)
public bool CalRes(List<double> toolDatas)
}
我現在要新增另一種變形,他的ToolData比較複雜, ex:
Class ToolB
{
public double CalToolData(double input, out ToolDataB toolDataB)
public bool CalRes(List<ToolDataB> toolDataBs)
}
Class ToolDataB
{
public int x;
public double y;
public string z;
}
我該如何用繼承加入ToolB?
目前的想法是
Interface ITool
{
public double CalToolData(double input, out ToolData toolData)
public bool CalRes(List<ToolData> toolDatas)
}
abstract class ToolData
{}
class ToolA: ITool
{
實作
public double CalToolData(double input, out ToolData toolData)
public bool CalRes(List<ToolData> toolDatas)
//為了共用舊code保留方法
public double CalToolData(double input, out double toolData)
public bool CalRes(List<double> toolDatas)
}
class ToolDataA : ToolData
{
double tooldata;
}
class ToolB: ITool
{
實作
public double CalToolData(double input, out ToolData toolData)
public bool CalRes(List<ToolData> toolDatas)
}
class ToolDataB: ToolData
{
public int x;
public double y;
public string z;
}
請問是否有更好的寫法?
另外,我在實做CalRes時,該如何轉型成我要的type? ConvertAll?
作者: s4300026 (s4300026)   2022-06-14 19:44:00
那跟out object 有什麼不一樣?double tooldata的意義與 double y 不同嗎? 感覺是必要項啊。
作者: testPtt (測試)   2022-06-14 21:10:00
class Tool<T> where T:ToolData,double
作者: BusHeroVER   2022-06-14 23:52:00
樓上的應該是interface ITool<T> where T:ToolData,double
作者: t64141 (榕樹)   2022-06-14 23:56:00
ToolA部分, virtual CalToolData(...)CalRes<T>(List<T> toolDatas)ToolB 繼承字 ToolA ,override CalToolData(...)
作者: testPtt (測試)   2022-06-15 08:49:00
改成<out T>Manager<T>跟Manager no T不能並存嗎?Manager<T>:Manager
作者: Litfal (Litfal)   2022-06-15 21:41:00
重點應該是你為何要繼承ToolA的data應該用ToolDataA包裝起來,不然你這樣弄得很亂這樣ToolB和ToolDataB都是A的擴充,就合理了CalRes不應該用轉型,而是ToolDataA和B各自實作自己的CalRes。若你的ToolB不能吃ToolDataA,或反過來,你就要好好考慮這樣的抽象關係是否合理

Links booklink

Contact Us: admin [ a t ] ucptt.com