[问题] 请问这样的继承方法怎么写

楼主: 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