推 s4300026: 那跟out object 有什麼不一樣? 06/14 19:44
推 s4300026: double tooldata的意義與 double y 不同嗎? 感覺是必要 06/14 19:46
→ s4300026: 項啊。 06/14 19:46
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
→ testPtt: class Tool<T> where T:ToolData,double 06/14 21:10
→ BusHeroVER: 樓上的應該是interface ITool<T> where T:ToolData,d 06/14 23:52
→ BusHeroVER: ouble 06/14 23:52
推 t64141: ToolA部分, virtual CalToolData(...) 06/14 23:56
→ t64141: CalRes<T>(List<T> toolDatas) 06/14 23:57
→ t64141: ToolB 繼承字 ToolA ,override CalToolData(...) 06/14 23:59
用泛型的話我工廠會編譯不過
class factory
{
ITool tool;
}
似乎需要預先輸入泛型類型
※ 編輯: powerD (36.224.138.227 臺灣), 06/15/2022 00:18:19
工廠模式我無法預先決定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
→ testPtt: 改成<out T> 06/15 08:49
→ testPtt: Manager<T>跟Manager no T不能並存嗎? 06/15 09:07
請問要如何共存?如果是另外新的Manager2<T>會必須維護兩套Manger
※ 編輯: powerD (36.224.138.227 臺灣), 06/15/2022 09:11:03
→ testPtt: Manager<T>:Manager 06/15 09:21
推 Litfal: 重點應該是你為何要繼承 06/15 21:41
→ Litfal: ToolA的data應該用ToolDataA包裝起來,不然你這樣弄得很 06/15 21:42
→ Litfal: 亂 06/15 21:42
→ Litfal: 這樣ToolB和ToolDataB都是A的擴充,就合理了 06/15 21:44
推 Litfal: CalRes不應該用轉型,而是ToolDataA和B各自實作自己的Cal 06/16 00:45
→ Litfal: Res。若你的ToolB不能吃ToolDataA,或反過來,你就要好好 06/16 00:45
→ Litfal: 考慮這樣的抽象關係是否合理 06/16 00:45