PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
公不
*停權中*
 

加入日期: Dec 2010
文章: 341
Lightbulb [程式設計問題???] 不同的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

請問該如何改?


謝謝
     
      
舊 2014-12-04, 08:00 PM #1
回應時引用此文章
公不離線中  
hui0312
*停權中*
 

加入日期: Mar 2002
您的住址: 台北市
文章: 102
你列的有點亂, 我也沒有看的很清處, 我 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 保護起來...
 
舊 2014-12-04, 11:21 PM #2
回應時引用此文章
hui0312離線中  
dino750
Major Member
 

加入日期: Jan 2002
文章: 187
小弟先在定義上說明,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.
舊 2014-12-04, 11:50 PM #3
回應時引用此文章
dino750離線中  
silent
Major Member
 

加入日期: Dec 2012
文章: 182
不懂,但感覺跟reflection好像有關係。
舊 2014-12-05, 12:16 AM #4
回應時引用此文章
silent離線中  
公不
*停權中*
 

加入日期: Dec 2010
文章: 341


應該說

有一個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個部分

那現在變成我程式要寫寫死

否則就會

型別轉換錯誤

或是

無法存取我要的結構

請問有辦法解決嗎 ?

謝謝
舊 2014-12-05, 01:24 AM #5
回應時引用此文章
公不離線中  
darkangel
Major Member
 
darkangel的大頭照
 

加入日期: Aug 2001
文章: 211
把 xxxx 跟 yyyy 搞一個 class xy,把 obj xy 傳給 obj a 來操作 xxxx 跟 yyyy。
這樣連型別轉換都不用了。
__________________
滿招損 謙受益

此文章於 2014-12-05 01:55 AM 被 darkangel 編輯.
舊 2014-12-05, 01:53 AM #6
回應時引用此文章
darkangel離線中  
Adsmt
Golden Member
 
Adsmt的大頭照
 

加入日期: Feb 2004
您的住址: 從來處來
文章: 2,762
樓主要實作的應該是 OOP 第三大絕:「多型」吧?

C# 使用 virtual method 就可以了。

請參考這裡....
http://msdn.microsoft.com/zh-tw/library/ms173152.aspx
舊 2014-12-05, 02:10 AM #7
回應時引用此文章
Adsmt離線中  
T磨人
*停權中*
 

加入日期: Sep 2010
文章: 691
我如果有相同需求 我會用 定義 interface 和 reflect 方式來實做 相關的 code.
之前工作分別用過 java/C# 實做過, 確實可行的.

沒 sample code... 我懶得寫 , 僅 提供概念 供參考.

此文章於 2014-12-05 09:36 AM 被 T磨人 編輯.
舊 2014-12-05, 09:34 AM #8
回應時引用此文章
T磨人離線中  
LR2001
Major Member
 

加入日期: Dec 2000
文章: 125
又到了周末了!

分享一個觀念,別給繼承、衍生等名詞給迷惑住,從實際子物件逆向抽出共同介面,進而設計出父類別,將資料封裝,以父類別介面寫程式。

構思一個面面俱到的父類別並不容易,特別是經過多層次繼承,所以盡量扁平化您的類別庫或程式架構。

附帶一提,C 的函式指標,才是我的最愛,結構裡放幾個,想怎麼玩都行。
我信奉,最少的規則,最大的自由,才能發揮無窮的想像力。
舊 2014-12-05, 10:07 AM #9
回應時引用此文章
LR2001離線中  
公不
*停權中*
 

加入日期: Dec 2010
文章: 341
Question

引用:
作者hui0312
你列的有點亂, 我也沒有看的很清處, 我 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 保護起來...


引用:
作者darkangel
把 xxxx 跟 yyyy 搞一個 class xy,把 obj xy 傳給 obj a 來操作 xxxx 跟 yyyy。
這樣連型別轉換都不用了。


引用:
作者Adsmt
樓主要實作的應該是 OOP 第三大絕:「多型」吧?

C# 使用 virtual method 就可以了。

請參考這裡....
http://msdn.microsoft.com/zh-tw/library/ms173152.aspx


引用:
作者T磨人
我如果有相同需求 我會用 定義 interface 和 reflect 方式來實做 相關的 code.
之前工作分別用過 java/C# 實做過, 確實可行的.

沒 sample code... 我懶得寫 , 僅 提供概念 供參考.




請問您的意思是這樣嗎 ?

OOP ?

interface 和 reflect 是 ?

我理解的意思是這樣

以下是我的code

PS. 是Java 的

https://gist.github.com/anonymous/5646bb920506cf9d8e19

此文章於 2014-12-05 10:40 AM 被 公不 編輯.
舊 2014-12-05, 10:39 AM #10
回應時引用此文章
公不離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是03:05 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。