[閒聊] 程式大師請進

作者: ZooseWu (N5)   2021-11-11 18:21:49
我有兩個class A 與 B
他們有80%的功能與函示名稱相似
然後我只有runtime的時候才知道物件身上有哪一個class
我有一個好方法可以簡單的呼叫 (A|B).function嗎
對了class不是我寫的
所以我沒辦法透過寫interface然後讓AB繼承這種方法
作者: aynmeow (只有我跟喵喵)   2021-11-11 18:22:00
if a 反射a
作者: SuicidePeko (string int = true;)   2021-11-11 18:23:00
(a)obj.fuckPeko()
作者: ZooseWu (N5)   2021-11-11 18:23:00
要用反射喔:( 反射感覺就很吃資源
作者: aynmeow (只有我跟喵喵)   2021-11-11 18:24:00
不用反射 case過去吧 夠簡單惹
作者: yam276 ('_')   2021-11-11 18:24:00
兩個完全不同的class嗎
作者: ZooseWu (N5)   2021-11-11 18:24:00
所以我有30條function 就要寫30個switch?
作者: aynmeow (只有我跟喵喵)   2021-11-11 18:25:00
除非你想去撈function2名稱做壞事 不然應該case就可以惹ㄅ
作者: ZooseWu (N5)   2021-11-11 18:25:00
應該說兩個套件實做同樣的功能 函示或變數名稱大部分一樣
作者: ZooseWu (N5)   2021-11-11 18:26:00
我本來想用泛型 where: A,B 可是好像沒有這種用法我現在就是用if else 可是要用的功能越來越多想說有沒有一勞永逸的通用解法
作者: MurasakiSion (紫咲シオン)   2021-11-11 18:27:00
什麼語言啊
作者: penguinsFly (企鵝會飛)   2021-11-11 18:30:00
不然你替他們兩個寫一個寫死的proxy
作者: ZooseWu (N5)   2021-11-11 18:30:00
那啥
作者: yam276 ('_')   2021-11-11 18:30:00
代理模式
作者: MurasakiSion (紫咲シオン)   2021-11-11 18:31:00
沒寫過C++++ 苦
作者: kerycheng (kk)   2021-11-11 18:32:00
沒寫過C= =用python用太久都變白癡了
作者: ZooseWu (N5)   2021-11-11 18:32:00
就是寫一個中間層把所有的功能都實做一遍 然後看狀況呼叫A或B喔
作者: SuicidePeko (string int = true;)   2021-11-11 18:32:00
每個函數定義一個 裡面就做if a a.call() else
作者: ZooseWu (N5)   2021-11-11 18:33:00
好智障 可是好像也只能這樣了
作者: kerycheng (kk)   2021-11-11 18:34:00
沒辦法從開頭給的一些變數或數值直接先去判斷要用哪個一定要在跑的時候才會知道是嘛?
作者: ZooseWu (N5)   2021-11-11 18:34:00
每個物件都有A 只是有可能有B 有B就要叫B 沒有就叫A
作者: SuicidePeko (string int = true;)   2021-11-11 18:34:00
這就class先天結構就不對了==只有遠路可走用object 然後(a) (b) 這樣會很慢噢??
作者: kerycheng (kk)   2021-11-11 18:35:00
這到底是誰寫的啊= =也太怪了吧
作者: lopp54321010 (嘻嘻010)   2021-11-11 18:36:00
那樣是unboxing 不到很慢 但是有GC
作者: MurasakiSion (紫咲シオン)   2021-11-11 18:37:00
不能寫介面給AB繼承那能寫class繼承AB嗎
作者: ZooseWu (N5)   2021-11-11 18:38:00
就是不行啊 一個是引擎的class 一個是套件的class
作者: SuicidePeko (string int = true;)   2021-11-11 18:39:00
原來叫unboxing 學到了
作者: ZooseWu (N5)   2021-11-11 18:40:00
看起來寫代理就是唯一解了
作者: jajeongsalan (插總撒狼)   2021-11-11 18:41:00
建map跟列舉 要用的時候把列舉丟進mapget出來
作者: MurasakiSion (紫咲シオン)   2021-11-11 18:44:00
GetType().GetMethod()?
作者: lopp54321010 (嘻嘻010)   2021-11-11 18:45:00
GetMethod()就太刺激了捏
作者: ZooseWu (N5)   2021-11-11 18:46:00
GetMethod就是反射了吧
作者: penguinsFly (企鵝會飛)   2021-11-11 18:46:00
不准反射 給我寫代理==
作者: lopp54321010 (嘻嘻010)   2021-11-11 18:47:00
反射最麻煩的是發行的時候如果要混淆之類的會壞掉捏
作者: SuicidePeko (string int = true;)   2021-11-11 18:48:00
感覺定義函數岔路的時候可以用delegate弄ternary + delegate? 不知道可讀性會如何就是了
作者: ZooseWu (N5)   2021-11-11 18:50:00
小腦袋好痛 我慢慢思考醞釀一下
作者: Apache (阿帕契)   2021-11-11 18:53:00
function map不適用這種情況
作者: lturtsamuel (港都都教授)   2021-11-11 18:56:00
不准反射== 醜死了

Links booklink

Contact Us: admin [ a t ] ucptt.com