[問題] 關於泛型傳遞類別的問題

看板C_Sharp作者 (楊伯)時間15年前 (2010/10/24 23:28), 編輯推噓0(0032)
留言32則, 3人參與, 最新討論串1/1
如下面這樣 public class A { public Name(){ ptint("A");} } void ShowName<T>( T Obj ) { Type tp = T.GetType(); tp.Name(); } void main() { A a = A(); ShowName(a); } 如上面那樣,同樣的概念我沒記錯的話在c++是可行的 ,但是我在c#會有error,好像是說tp沒有Name()可以 呼叫?? c#初學,請各位前輩指教一下!!感恩@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.128.56 ※ 編輯: yan04870449 來自: 122.117.128.56 (10/24 23:29)

10/24 23:33, , 1F
http://nopaste.csie.org/91191 其實這樣就夠了
10/24 23:33, 1F

10/24 23:36, , 2F
感謝J大的回覆,我可以接收到傳過來的物件,但是我沒
10/24 23:36, 2F

10/24 23:36, , 3F
辦法呼叫物件裡的函式
10/24 23:36, 3F

10/24 23:39, , 4F
把你想做的事情說得明確一點吧...
10/24 23:39, 4F

10/24 23:41, , 5F
我想要做的是有點像事件呼叫,我先在a裡面定義一個函
10/24 23:41, 5F

10/24 23:42, , 6F
式,然後我把這個物件用函式傳出去,接到的那個函式再
10/24 23:42, 6F

10/24 23:43, , 7F
呼叫a裡面這個已經定義好的函式
10/24 23:43, 7F

10/24 23:44, , 8F
何不寫 void foo(A a) { a.function(); } 呢?
10/24 23:44, 8F

10/24 23:49, , 9F
這裡看不出你使用泛型的必要性
10/24 23:49, 9F

10/24 23:50, , 10F
大概是這樣子,我的A是一個獨立的工作類別,但它必須
10/24 23:50, 10F

10/24 23:50, , 11F
要被呼叫才會開始運作,當運作結束之後會傳訊息回到呼
10/24 23:50, 11F

10/24 23:51, , 12F
叫它的那個類別做通知,因為呼叫A的物件都不一樣,所
10/24 23:51, 12F

10/24 23:52, , 13F
以才想要用像call back的方式來做
10/24 23:52, 13F

10/24 23:54, , 14F
還是看不出為什麼會用到泛型...XD
10/24 23:54, 14F

10/24 23:55, , 15F
你可以用C++給我個完整的例子 我寫成C#讓你參考?
10/24 23:55, 15F

10/25 00:09, , 16F
10/25 00:09, 16F

10/25 00:10, , 17F
C#這邊遇到的問題就是C++ Code那行t.Return();
10/25 00:10, 17F

10/25 00:11, , 18F
C#這邊好像沒辦法像C++那樣直接呼叫T裡面的function
10/25 00:11, 18F

10/25 00:30, , 19F
http://nopaste.csie.org/19ca5 是我的話C#會寫成這樣
10/25 00:30, 19F

10/25 00:30, , 20F
使用繼承共同parent的方式去做
10/25 00:30, 20F

10/25 00:38, , 21F
j大威能@@ 問題解決!!!
10/25 00:38, 21F

10/25 00:38, , 22F
不過其實我修改的東西是在別人制定的架構下,我這樣子
10/25 00:38, 22F

10/25 00:40, , 23F
都要在接收的class內去繼承interface,如果不繼承也可
10/25 00:40, 23F

10/25 00:40, , 24F
以做到相同的結果嗎?
10/25 00:40, 24F

10/25 06:39, , 25F
一般的callback應該是在呼叫A的時候,把callback function
10/25 06:39, 25F

10/25 06:40, , 26F
當成參數一起傳入吧,而不是A直接去猜caller的callback func
10/25 06:40, 26F

10/25 06:48, , 27F
就算不這樣做,定義interface也是比較合理的作法
10/25 06:48, 27F

10/25 06:57, , 28F
直接假設object裡有哪個方法不就相當於定了interface卻不寫
10/25 06:57, 28F

10/25 06:57, , 29F
在程式中,只有寫的人才知道的溝通方式嗎
10/25 06:57, 29F

10/25 07:10, , 30F
硬要做的話,Type tp = typeof(T); 或是 Obj.GetType();
10/25 07:10, 30F

10/25 07:10, , 31F
tp.InvokeMember("Name",BindingFlags.InvokeMethod, null
10/25 07:10, 31F

10/25 07:11, , 32F
, Obj, null); 最後一個參數是傳給方法的參數object array
10/25 07:11, 32F
文章代碼(AID): #1Cn52MAa (C_Sharp)