作者:
powerD ( NN 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:00class 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(...)
作者: BusHeroVER 2022-06-15 00:03:00
作者:
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,或反過來,你就要好好考慮這樣的抽象關係是否合理