C_Sharp 板


LINE

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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP