[問題] 請問這樣的繼承方法怎麼寫
我原先有一種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?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.138.227 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1655203828.A.269.html
推
06/14 19:44,
2年前
, 1F
06/14 19:44, 1F
推
06/14 19:46,
2年前
, 2F
06/14 19:46, 2F
→
06/14 19:46,
2年前
, 3F
06/14 19:46, 3F
out object應該是跟out ToolData一樣只是ToolData可以再限制類別,但一樣無法跟
舊的out double共用,舊的double變數丟到out object編譯會報錯。
ToolDataB跟ToolDataA只是舉例,不過沒錯目前的ToolDataB裡面的確有成員
是跟原來double tooldata可以對應的,那有比較好的寫法嗎?
※ 編輯: powerD (36.224.138.227 臺灣), 06/14/2022 20:19:39
→
06/14 21:10,
2年前
, 4F
06/14 21:10, 4F
→
06/14 23:52,
2年前
, 5F
06/14 23:52, 5F
→
06/14 23:52,
2年前
, 6F
06/14 23:52, 6F
推
06/14 23:56,
2年前
, 7F
06/14 23:56, 7F
→
06/14 23:57,
2年前
, 8F
06/14 23:57, 8F
→
06/14 23:59,
2年前
, 9F
06/14 23:59, 9F
→
06/15 00:03,
2年前
, 10F
06/15 00:03, 10F
用泛型的話我工廠會編譯不過
class factory
{
ITool tool;
}
似乎需要預先輸入泛型類型
※ 編輯: powerD (36.224.138.227 臺灣), 06/15/2022 00:18:19
→
06/15 00:25,
2年前
, 11F
06/15 00:25, 11F
工廠模式我無法預先決定T
※ 編輯: powerD (36.224.138.227 臺灣), 06/15/2022 00:43:57
我原先的想法
class Manager
{
Tool tool;
App(ToolA tool_unit)
{
tool = (Tool)tool_unit;
}
App(Tool tool_unit)
{
tool = tool_unit;
}
Cal(double input)
{
tool.CalToolData(input, out ToolData toolData);
}
}
void Main()
{
...
//舊code
App appA = new Manager(toolA);
//新
App appB = new Manager((Tool)toolB);
appA.Cal()
appB.Cal()
...
}
寫成泛型的話,我該如何寫通用的Manager,
因為要沿用舊code,Manager不可以改成泛型
※ 編輯: powerD (36.224.138.227 臺灣), 06/15/2022 08:48:20
→
06/15 08:49,
2年前
, 12F
06/15 08:49, 12F
→
06/15 09:07,
2年前
, 13F
06/15 09:07, 13F
請問要如何共存?如果是另外新的Manager2<T>會必須維護兩套Manger
※ 編輯: powerD (36.224.138.227 臺灣), 06/15/2022 09:11:03
→
06/15 09:21,
2年前
, 14F
06/15 09:21, 14F
推
06/15 21:41,
2年前
, 15F
06/15 21:41, 15F
→
06/15 21:42,
2年前
, 16F
06/15 21:42, 16F
→
06/15 21:42,
2年前
, 17F
06/15 21:42, 17F
→
06/15 21:44,
2年前
, 18F
06/15 21:44, 18F
推
06/16 00:45,
2年前
, 19F
06/16 00:45, 19F
→
06/16 00:45,
2年前
, 20F
06/16 00:45, 20F
→
06/16 00:45,
2年前
, 21F
06/16 00:45, 21F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章