![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - [程式設計問題???] 不同的SubObject該如何自動正確轉換?Mutil-Thread怎麼用
(https://www.pcdvd.com.tw/showthread.php?t=1065147)
|
---|
[程式設計問題???] 不同的SubObject該如何自動正確轉換?Mutil-Thread怎麼用
請問一下
我的 Code在此 https://gist.github.com/anonymous/a1f0829695e7872a38de ________________________ 我有一個Object 然後有10個SubObject繼承自Object 基本的String都是定義在Object內 而SubObject也有自己特殊的String 現在我利用Object定義的方法 一次獲取這10個SubObject 然後要在UI上面顯示這10個SubObject的資料 現在我的問題卡在 如果SubObject的String已經在Object已經定義的話 那我可以直接取得 可是如果是個別SubObject的自定義特殊String 那我變成需要 {轉換型別}-------SubObject之間無法轉換 才可以取得 請問我有辦法不用轉換型別直接取值嗎? 因為 我是這樣產生SubObject Object detials = (Object) Result.info; Object inst = null; if (detials.mType.equals("GGININ")&& detials.mSubType.equals("Der")) { inst = new SubObject(); } 然後取得SubObject的自定義特殊String 我目前是這樣 Object mObject = mObjectlist.get(position); SubObject tSubObject = (SubObject) mObject; tSubObject .String; 因為SubObject之間無法轉換 所以型別錯誤的話 會讓APP掛點 有辦法做到自動轉換 好讓我取值嗎? --------------------- 另外的問題 在之前提到的多Thread 在上面的Code 裡面每一個SubObject都有各自的GetCommand 所以我只要呼叫 getValue()就可以 可是 如果我在new thread中用for迴圈一次呼叫全部的SubObject跑getValue() APP就會出現thread錯誤造成crash 請問該如何改? 謝謝 |
你列的有點亂, 我也沒有看的很清處, 我 C# 不好....我用 C++ 舉例
你要不轉型成繼承的型態來取值, 你 base 的 class 就要有對應的 virtual function for example class base_parent { public: virtual string get_str_from_id( int id ) = 0; } class child : base_parent { virtual string get_str_from_id( int id ) { return str[ id ]; } } thread crash 的話, 要是你沒有在 thread 中 write data 的話, 通常邏輯在爛也不會 crash, 因為是 thread safe 的. 要是有 write 動作, 你就要想好先後關系, 然後用 critical section 保護起來... |
小弟先在定義上說明,class 是你在寫 public class xxx extends yyy { ... }這部分, object 是你把class 實體化(instantiate)後, xxx object = new xxx();
就小弟對問題的理解,你有一 Class 繼承 SuperClass,你要有 SuperClass的型態,但又要用到Class的功能.你可以寫 SuperClass object = new Class();當你需要Class的功能時,你可以轉換 ((Class)object).classFunction(); 能不能轉換要看當初實體化的class是哪一個,subclass的實體可轉換到superClass, superClass的實體不可轉換到subclass. |
不懂,但感覺跟reflection好像有關係。
|
嗯
應該說 有一個A class裡面定義了基本款的結構資訊 然後B跟C都是繼承A產生的 所以A有的B跟C都有 但是B跟C另外自己也各自定義了YYYY這專屬B 跟 XXXXX 專屬C的結構 一般操作時都是用 B跟C 來存放資料與操作 但因為B與C都是繼承自A 所以在基本資料上可藉由{型別轉換}來達成存取基本資料的動作 那我目前問題在於 我要 {動態}的使用 因此有時候是拿到B 有時候拿到C 這時候雖說都可以透過型別轉換暫時到A 可是因為A裡面沒有定義YYYY 與 XXXXX 所以我沒辦法存取這2個部分 那現在變成我程式要寫寫死 否則就會 型別轉換錯誤 或是 無法存取我要的結構 請問有辦法解決嗎 ? 謝謝 |
把 xxxx 跟 yyyy 搞一個 class xy,把 obj xy 傳給 obj a 來操作 xxxx 跟 yyyy。
這樣連型別轉換都不用了。 |
樓主要實作的應該是 OOP 第三大絕:「多型」吧?
C# 使用 virtual method 就可以了。 請參考這裡.... http://msdn.microsoft.com/zh-tw/library/ms173152.aspx |
我如果有相同需求 我會用 定義 interface 和 reflect 方式來實做 相關的 code.
之前工作分別用過 java/C# 實做過, 確實可行的. 沒 sample code... 我懶得寫 , 僅 提供概念 供參考. |
又到了周末了!
分享一個觀念,別給繼承、衍生等名詞給迷惑住,從實際子物件逆向抽出共同介面,進而設計出父類別,將資料封裝,以父類別介面寫程式。 構思一個面面俱到的父類別並不容易,特別是經過多層次繼承,所以盡量扁平化您的類別庫或程式架構。 附帶一提,C 的函式指標,才是我的最愛,結構裡放幾個,想怎麼玩都行。 我信奉,最少的規則,最大的自由,才能發揮無窮的想像力。 |
引用:
引用:
引用:
引用:
請問您的意思是這樣嗎 ? OOP ? interface 和 reflect 是 ? 我理解的意思是這樣 以下是我的code PS. 是Java 的 https://gist.github.com/anonymous/5646bb920506cf9d8e19 |
所有的時間均為GMT +8。 現在的時間是08:32 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。