[閒聊] 程式大師請進

看板Marginalman作者 (動物園)時間4年前 (2021/11/11 18:21), 4年前編輯推噓13(14131)
留言46則, 11人參與, 4年前最新討論串11/38 (看更多)
我有兩個class A 與 B 他們有80%的功能與函示名稱相似 然後我只有runtime的時候才知道物件身上有哪一個class 我有一個好方法可以簡單的呼叫 (A|B).function嗎 對了class不是我寫的 所以我沒辦法透過寫interface然後讓AB繼承這種方法 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.137.134 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1636626112.A.586.html

11/11 18:22, 4年前 , 1F
if a 反射a
11/11 18:22, 1F

11/11 18:23, 4年前 , 2F
(a)obj.fuckPeko()
11/11 18:23, 2F

11/11 18:23, 4年前 , 3F
要用反射喔:( 反射感覺就很吃資源
11/11 18:23, 3F

11/11 18:24, 4年前 , 4F
不用反射 case過去吧 夠簡單惹
11/11 18:24, 4F

11/11 18:24, 4年前 , 5F
兩個完全不同的class嗎
11/11 18:24, 5F

11/11 18:24, 4年前 , 6F
所以我有30條function 就要寫30個switch?
11/11 18:24, 6F

11/11 18:25, 4年前 , 7F
除非你想去撈function2名稱做壞事 不然應該case就可以惹
11/11 18:25, 7F

11/11 18:25, 4年前 , 8F
11/11 18:25, 8F

11/11 18:25, 4年前 , 9F
應該說兩個套件實做同樣的功能 函示或變數名稱大部分一樣
11/11 18:25, 9F

11/11 18:25, 4年前 , 10F
不用switch吧 就好多if else哈哈智障智障ㄉ
11/11 18:25, 10F

11/11 18:26, 4年前 , 11F
我本來想用泛型 where: A,B 可是好像沒有這種用法
11/11 18:26, 11F

11/11 18:26, 4年前 , 12F
我現在就是用if else 可是要用的功能越來越多
11/11 18:26, 12F

11/11 18:26, 4年前 , 13F
想說有沒有一勞永逸的通用解法
11/11 18:26, 13F

11/11 18:27, 4年前 , 14F
什麼語言啊
11/11 18:27, 14F
javascript可以簡單的用 if(typeof obj[FunctionName] === 'function') obj[FunctionName]() 可是我寫的是C# ※ 編輯: ZooseWu (36.227.137.134 臺灣), 11/11/2021 18:29:41

11/11 18:30, 4年前 , 15F
不然你替他們兩個寫一個寫死的proxy
11/11 18:30, 15F

11/11 18:30, 4年前 , 16F
那啥
11/11 18:30, 16F

11/11 18:30, 4年前 , 17F
代理模式
11/11 18:30, 17F

11/11 18:31, 4年前 , 18F
沒寫過C++++ 苦
11/11 18:31, 18F

11/11 18:32, 4年前 , 19F
沒寫過C= =
11/11 18:32, 19F

11/11 18:32, 4年前 , 20F
用python用太久都變白癡了
11/11 18:32, 20F

11/11 18:32, 4年前 , 21F
就是寫一個中間層把所有的功能都實做一遍 然後看狀況
11/11 18:32, 21F

11/11 18:32, 4年前 , 22F
呼叫A或B喔
11/11 18:32, 22F

11/11 18:32, 4年前 , 23F
每個函數定義一個 裡面就做if a a.call() else
11/11 18:32, 23F

11/11 18:33, 4年前 , 24F
好智障 可是好像也只能這樣了
11/11 18:33, 24F

11/11 18:34, 4年前 , 25F
沒辦法從開頭給的一些變數或數值直接先去判斷要用哪個
11/11 18:34, 25F

11/11 18:34, 4年前 , 26F
一定要在跑的時候才會知道是嘛?
11/11 18:34, 26F

11/11 18:34, 4年前 , 27F
每個物件都有A 只是有可能有B 有B就要叫B 沒有就叫A
11/11 18:34, 27F

11/11 18:34, 4年前 , 28F
這就class先天結構就不對了==只有遠路可走
11/11 18:34, 28F

11/11 18:35, 4年前 , 29F
用object 然後(a) (b) 這樣會很慢噢??
11/11 18:35, 29F

11/11 18:35, 4年前 , 30F
這到底是誰寫的啊= =也太怪了吧
11/11 18:35, 30F

11/11 18:36, 4年前 , 31F
那樣是unboxing 不到很慢 但是有GC
11/11 18:36, 31F

11/11 18:37, 4年前 , 32F
不能寫介面給AB繼承那能寫class繼承AB嗎
11/11 18:37, 32F

11/11 18:38, 4年前 , 33F
就是不行啊 一個是引擎的class 一個是套件的class
11/11 18:38, 33F
套件在原本引擎的功能上實作其他功能 之後都要叫套件才有用 但是不是所有物件都有使用到套件 沒用到套件的物件就要呼叫引擎的物件 ※ 編輯: ZooseWu (36.227.137.134 臺灣), 11/11/2021 18:40:01

11/11 18:39, 4年前 , 34F
原來叫unboxing 學到了
11/11 18:39, 34F

11/11 18:40, 4年前 , 35F
看起來寫代理就是唯一解了
11/11 18:40, 35F

11/11 18:41, 4年前 , 36F
建map跟列舉 要用的時候把列舉丟進mapget出來
11/11 18:41, 36F
有點不太懂 能不能隨便寫個pseudo code讓我感覺一下 ※ 編輯: ZooseWu (36.227.137.134 臺灣), 11/11/2021 18:45:16

11/11 18:44, 4年前 , 37F
GetType().GetMethod()?
11/11 18:44, 37F

11/11 18:45, 4年前 , 38F
GetMethod()就太刺激了捏
11/11 18:45, 38F

11/11 18:46, 4年前 , 39F
GetMethod就是反射了吧
11/11 18:46, 39F

11/11 18:46, 4年前 , 40F
不准反射 給我寫代理==
11/11 18:46, 40F

11/11 18:47, 4年前 , 41F
反射最麻煩的是發行的時候如果要混淆之類的會壞掉捏
11/11 18:47, 41F

11/11 18:48, 4年前 , 42F
感覺定義函數岔路的時候可以用delegate弄
11/11 18:48, 42F

11/11 18:49, 4年前 , 43F
ternary + delegate? 不知道可讀性會如何就是了
11/11 18:49, 43F

11/11 18:50, 4年前 , 44F
小腦袋好痛 我慢慢思考醞釀一下
11/11 18:50, 44F

11/11 18:53, 4年前 , 45F
function map不適用這種情況
11/11 18:53, 45F

11/11 18:56, 4年前 , 46F
不准反射== 醜死了
11/11 18:56, 46F
文章代碼(AID): #1XZEx0M6 (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1XZEx0M6 (Marginalman)