首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

反射动态调用类方法的一个有关问题(返回参数 out)

2012-02-19 
反射动态调用类方法的一个问题(返回参数 out)相关代码如下:publicstaticobject[]FindFunction(stringmetho

反射动态调用类方法的一个问题(返回参数 out)
相关代码如下:
public   static   object[]   FindFunction(string   methodName,   object[]   pr)
                {
                        Assembly   a   =   Assembly.LoadFrom(dllFilePath);//加载DLL
                        if   (a   ==   null)
                        {
                                throw   new   Exception( "Can 't   Find   The     File ");
                        }
                        object   o   =   a.CreateInstance( "namespace.class ");//寻找类
                        if   (o   ==   null)
                        {
                                throw   new   Exception( "Can 't   Create   The   Object ");
                        }
                        MethodInfo   m   =   o.GetType().GetMethod(methodName);//调用方法
                        if   (m   ==   null)
                        {
                                throw   new   Exception( "Can 't   Find   The   Method   of   "   +   methodName);
                        }
                        return   (object)m.Invoke(o,   pr);//执行
                }


以下是一个函数的原型:
public   static   int   CheckUserCanLogin(object   []   pr,   out   string   UserName)

以下是调用:
FindFunction( "CheckUserCanLogin ",   new   object[]   {   pr,   UserName   });

问题是:
怎么获取最后一个返回参数的值.

[解决办法]
Invoke是支持ref/out调用参数的,问题是你的调用方法:

FindFunction( "CheckUserCanLogin ", new object[] { pr, UserName });
这时候UserName引用的一个copy被保留在new object[]数组里面,传递给CheckUserCanLogin。所以被改变的是这个在数组里面的饮用,不是UserName自己。

修改如下:
object[] params = new object[]{ pr, UserName };
FindFunction( "CheckUserCanLogin ", params);

UserName = params[1]; // <---- 保改变后得值copy回来

热点排行