作者yan04870449 (杨伯)
看板C_Sharp
标题[问题] 关於泛型传递类别的问题
时间Sun Oct 24 23:28:20 2010
如下面这样
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)
2F:→ yan04870449:感谢J大的回覆,我可以接收到传过来的物件,但是我没 10/24 23:36
3F:→ yan04870449:办法呼叫物件里的函式 10/24 23:36
4F:→ james732:把你想做的事情说得明确一点吧... 10/24 23:39
5F:→ yan04870449:我想要做的是有点像事件呼叫,我先在a里面定义一个函 10/24 23:41
6F:→ yan04870449:式,然後我把这个物件用函式传出去,接到的那个函式再 10/24 23:42
7F:→ yan04870449:呼叫a里面这个已经定义好的函式 10/24 23:43
8F:→ james732:何不写 void foo(A a) { a.function(); } 呢? 10/24 23:44
9F:→ james732:这里看不出你使用泛型的必要性 10/24 23:49
10F:→ yan04870449:大概是这样子,我的A是一个独立的工作类别,但它必须 10/24 23:50
11F:→ yan04870449:要被呼叫才会开始运作,当运作结束之後会传讯息回到呼 10/24 23:50
12F:→ yan04870449:叫它的那个类别做通知,因为呼叫A的物件都不一样,所 10/24 23:51
13F:→ yan04870449:以才想要用像call back的方式来做 10/24 23:52
14F:→ james732:还是看不出为什麽会用到泛型...XD 10/24 23:54
15F:→ james732:你可以用C++给我个完整的例子 我写成C#让你参考? 10/24 23:55
17F:→ yan04870449:C#这边遇到的问题就是C++ Code那行t.Return(); 10/25 00:10
18F:→ yan04870449:C#这边好像没办法像C++那样直接呼叫T里面的function 10/25 00:11
20F:→ james732:使用继承共同parent的方式去做 10/25 00:30
21F:→ yan04870449:j大威能@@ 问题解决!!! 10/25 00:38
22F:→ yan04870449:不过其实我修改的东西是在别人制定的架构下,我这样子 10/25 00:38
23F:→ yan04870449:都要在接收的class内去继承interface,如果不继承也可 10/25 00:40
24F:→ yan04870449:以做到相同的结果吗? 10/25 00:40
25F:→ ssccg:一般的callback应该是在呼叫A的时候,把callback function 10/25 06:39
26F:→ ssccg:当成参数一起传入吧,而不是A直接去猜caller的callback func 10/25 06:40
27F:→ ssccg:就算不这样做,定义interface也是比较合理的作法 10/25 06:48
28F:→ ssccg:直接假设object里有哪个方法不就相当於定了interface却不写 10/25 06:57
29F:→ ssccg:在程式中,只有写的人才知道的沟通方式吗 10/25 06:57
30F:→ ssccg:硬要做的话,Type tp = typeof(T); 或是 Obj.GetType(); 10/25 07:10
31F:→ ssccg:tp.InvokeMember("Name",BindingFlags.InvokeMethod, null 10/25 07:10
32F:→ ssccg:, Obj, null); 最後一个参数是传给方法的参数object array 10/25 07:11