看板 C_Sharp 關於我們 聯絡資訊
這是MSDN上的範例: Object o = Activator.CreateInstance(typeof(StringBuilder)); // Append a string into the StringBuilder object and display the // StringBuilder. StringBuilder sb = (StringBuilder) o; sb.Append("Hello, there."); Console.WriteLine(sb); Activator.CreateInstance可以將Object o轉換成StringBuilder 然後還要將o轉型成StringBuilder, 才能呼叫sb.Append 我想問的問題是, 如果我有的資訊只有Type RRR, RRR可能是任何Type Object o = Activator.CreateInstance(RRR); 但這樣我要怎樣才能把Object o轉換成RRR所代表的class, 不然我無法呼叫RRR包含的function, 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.21.72
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