→ pico2k:try use o.GetType()... 07/07 17:43
什麼意思啊? o.GetType() 拿到的值會等於 RRR
但還是不知道怎麼轉成RRR耶..
→ optimist9266:既然你的Type可能是任何類別,那電腦怎麼知道是哪個 07/07 18:12
→ optimist9266:然後要幫你自動完成哪個類別的方法呢? 07/07 18:12
我舉個例子好了:
public class abc
{
public int init=0;
public int show()
{
return init;
}
}
string typename = abc.GetType().AssemblyQualifiedName;
這個typename字串儲存在檔案裡
Type ObjType = Type.GetType(typename);
這樣我會拿回abc的type, 到這裡ObjType = abc.getType();
object tempObj = Activator.CreateInstance(ObjType);
這樣會把object tempObj轉換成abc
這時如果我想call abc裡的show() or init變數, 一般做法是:
abc tempabc = (abc)tempObj;
然後再:
tempabc.show() or tempabc.init
但實際上到這裡知道的資訊, 只有從檔案取出來的typename轉換成ObjType
光是Type變數, 沒辦法讓tempObj轉型去呼叫show()
※ 編輯: xanlich 來自: 118.168.21.72 (07/07 18:25)
→ optimist9266:你的寫法好像跟 07/07 18:13
→ optimist9266:StringBuilder sb = new StringBuilder(); 一樣... 07/07 18:14
→ optimist9266:那何不寫個判斷式去判斷字串轉換成對應型別? 07/07 18:45
那樣就變苦工了呀 XD, 我有100個class變成要寫100條判斷式
所以我上來問, 有沒有辦法在只有Type變數的情況可以轉型, 謝謝~
※ 編輯: xanlich 來自: 118.168.21.72 (07/07 18:51)
→ andymai:類別不同~方法相同嗎?如果相同是不是該弄個介面出來就好? 07/07 19:16
→ andymai:如果不相同~那還是得寫判斷式才知道要呼叫什麼吧?或者~弄 07/07 19:17
→ andymai:個介面的方法出來~每支都去實作自己的步驟就好了... 07/07 19:19
推 liunate:轉型完之後你還是不能直接呼叫show(),用Reflection做吧 07/07 21:34