有懂反射的在么?

avi9111 2012-05-04 10:39:40
这是我的反射调用

Assembly ass = Assembly.LoadFrom("MyApplication.exe");
Type type = ass.GetType("MyApplication.CanteenTablePanel");//必须使用名称空间+类名称
System.Reflection.MethodInfo method = type.GetMethod("funLoadRoom");//方法的名称
object obj = Activator.CreateInstance(type, rom.ID);//必须使用名称空间+类名称
method.Invoke(obj,new object[]{null,null}); //实例方法的调用

但是如果我这样调用的话,能执行方法“funLoadRoom”,但这个方法是重新生成的类的方法

有没什么写法可以执行已经存在的(静态)的类的方法

因为我需要调用该方法,并且该方法需要访问,当前程序已经存在的变量,所以我不可能调用一个新增的类

有什么方法可以反射调用当前类
...全文
168 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiehuanxie 2012-05-05
  • 打赏
  • 举报
回复
没搞懂你的问题, 静态类里的方法不是静态方法??
你既然有实例了你就把实例传进去啊,为什么还要创建新实例。。。
  • 打赏
  • 举报
回复
是public方法吗
老毕 2012-05-05
  • 打赏
  • 举报
回复
引用
有没什么写法可以执行已经存在的(静态)的类的方法
因为我需要调用该方法,并且该方法需要访问,当前程序已经存在的变量,所以我不可能调用一个新增的类
有什么方法可以反射调用当前类


个人理解,上面这三句话里的“已经存在的类”,是不是应该换作“已经存在的实例对象”
  • 打赏
  • 举报
回复
System.Reflection.MethodInfo method = type.GetMethod("funLoadRoom", BindingFlags.Static);
method.Invoke(null, new object[]{null,null});
avi9111 2012-05-05
  • 打赏
  • 举报
回复
用一楼的写法会爆错

非静态方法需要一个目标
wllllll 2012-05-05
  • 打赏
  • 举报
回复
如果你的funLoadRoom方法并不是一个静态方法,那么你的MyApplication.CanteenTablePanel需要new。
使用type.GetConstructor来获取实列的方法名称,然后调用,这时会返回一个obj的CanteenTablePanel对象

获得MethodInfo后,调用时,只要把这个obj对象发送过去就可以了。
avi9111 2012-05-05
  • 打赏
  • 举报
回复
由问反射变成问ioc了

看来还是很多人懂反射的么
zh6335901 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
有什么.net的ioc框架可以提供下么??

也可以这么说吧,现在,我就是要做一个ioc出来,我本来没想做的,不过做着做着,这个框架就被ioc了

我的要求很简单,

Assembly有一个方法是CreateInstance()

但有没方法是LoadInstance而不是CreateInstance呢?
[/Quote]
Kernel和StructMap
avi9111 2012-05-05
  • 打赏
  • 举报
回复
有什么.net的ioc框架可以提供下么??

也可以这么说吧,现在,我就是要做一个ioc出来,我本来没想做的,不过做着做着,这个框架就被ioc了

我的要求很简单,

Assembly有一个方法是CreateInstance()

但有没方法是LoadInstance而不是CreateInstance呢?
threenewbee 2012-05-05
  • 打赏
  • 举报
回复
任何IoC框架都可以轻易配置这种依赖关系。
avi9111 2012-05-05
  • 打赏
  • 举报
回复
回楼上,我的不是静态方法,你连我们基本在讨论什么都不知道

我只是有一个类,这个类有一个公共方法

我要做的是一个插件框架

我有一个按钮属于插件A,这个类属于插件B

A调用B多次,就这么简单,A并不知道B实例,A只知道B的名称,因为这是我在XML或者配置文件里面写好的,

我在XML把B改成C, a就由访问b变为访问c了,

我现在正在研究反射怎么做这个,我相信这种插件多是用反射做的,而不是消息做的.

(我现在能调用b不过b每次都是new 一个实例的)
threenewbee 2012-05-05
  • 打赏
  • 举报
回复
lz根本不具有基本编程常识。

静态变量在同一个程序内有效,怎么可以在不同的程序之间共享呢。
avi9111 2012-05-05
  • 打赏
  • 举报
回复
4楼的方法是对的,

不过我的方法真的不是静态方法

我的问题是这样的

我的程序已经初始化了一个类

我能用反射重复调用这个类的方法么,《--这时候我只知道这个类名,方法名,我需要的是动态调用,而不是平常的HARD CODE,所以觉得反射方法可以

而平常的反射方法只是初始化一个类,调用类里面的方法
avi9111 2012-05-05
  • 打赏
  • 举报
回复
是public啊,不是public根本不能用反射获取吧
xiehuanxie 2012-05-04
  • 打赏
  • 举报
回复
method.Invoke(null, new object[] { null, null });

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧