最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 编程开发 > asp教程

通过反射调用带有ref或者out的参数的方法

日期:08-06    来源:中国设计秀    作者:cnwebshow.com

原帖放在GCDN上,由于GCDN做了整合调整,现在关注产品交流等原因GCDN Blog关闭了,只好把一些有用点的搬过来了。ecv中国设计秀
ecv中国设计秀
2009年8月13日 12:29 by winkingecv中国设计秀
ecv中国设计秀
写这篇博客,原起今天CyljXu问我一个问题:如何通过反射调用带有ref或者out的参数的方法?想着可能其他人也会遇到这个问题,权且记录下来,以备后行者搜索到。ecv中国设计秀
ecv中国设计秀
这个在MSDN上有解释,参考 MethodBase.Invoke方法 。 ecv中国设计秀
ecv中国设计秀
ecv中国设计秀
public Object Invoke(    Object obj,    Object[] parameters)ecv中国设计秀
ecv中国设计秀
ecv中国设计秀
Visual C++ ecv中国设计秀
publicecv中国设计秀
: virtual Object^ Invoke( Object^ obj, arrayJ# ecv中国设计秀
publicecv中国设计秀
final Object Invoke( Object obj, Object[] parameters )ecv中国设计秀
JScript ecv中国设计秀
publicecv中国设计秀
finalecv中国设计秀
functionecv中国设计秀
Invoke( obj : Object, parameters : Object[] ) : Objectecv中国设计秀
参数ecv中国设计秀
obj 类型:System.Object ecv中国设计秀
ecv中国设计秀
对其调用方法或构造函数的对象。如果方法是静态的,则忽略此参数。如果构造函数是静态的,则此参数必须为 null 引用(在 Visual Basic 中为 Nothing ) 或定义该构造函数的类的实例。 ecv中国设计秀
ecv中国设计秀
parameters 类型: System.Object[] ecv中国设计秀
ecv中国设计秀
调用的方法或构造函数的参数列表。这是一个对象数组,这些对象与要调用的方法或构造函数的参数具有相同的数量、顺序和类型。如果没有任何参数,则 parameters 应为 null 引用(在 Visual Basic 中为 Nothing ) 。 ecv中国设计秀
ecv中国设计秀
如果此实例所表示的方法或构造函数采用 ref 参数(在 Visual Basic 中为 ByRef ),使用此函数调用该方法或构造函数时, 该参数不需要任何特殊属性 。如果数组中的对象未用值来显式初始化,则该对象将包含该对象类型的默认值。对于引用类型的元素,该值为 null 引用(在 Visual Basic 中为 Nothing ) 。对于值类型的元素,该值为 0、0.0 或 false ,具体取决于特定的元素类型。 ecv中国设计秀
ecv中国设计秀
那么该如何调用并处理传值呢?请看如下示例: ecv中国设计秀
ecv中国设计秀
1 class PRogram 2 { 3     static void Main(string[] args) 4     { 5         string content = "main"; //#1 variable 6          MethodInfo testMethod = typeof(Program).GetMethod("TestMethod", 7             BindingFlags.Static | BindingFlags.NonPublic); 8         if (testMethod != null) 9         {10             // Following way can not take content back.11             // -------------------------------------12              testMethod.Invoke(null, new object[] { content /* #1 variable */ });13             Console.WriteLine(content); // #1 variable, Output is: main14             // -------------------------------------15   16 17             object[] invokeArgs = new object[] { content /* #1 variable */ };18             testMethod.Invoke(null, invokeArgs);19             content = (string)invokeArgs[0]; // #2 variable, bypass from invoke, set to content.20              Console.WriteLine(content); // #2 variable, Output is: test21          }22     }23 24     static void TestMethod(ref string arg)25     {26         arg = "test"; // #2 variable, wanna bypass to main process.27      }28 }ecv中国设计秀
ecv中国设计秀
To be the apostrophe which changed “Impossible” into “I’m possible”ecv中国设计秀
----------------------------------------------------ecv中国设计秀
WinkingZhang's Blog (http://winkingzhang.cnblogs.com)ecv中国设计秀
GCDN(http://gcdn.grapecity.com/cs) ecv中国设计秀
 ecv中国设计秀

本文引用地址:/bc/article_46142.html
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明