使用输出参数调用反射

编程入门 行业动态 更新时间:2024-10-24 14:15:45
本文介绍了使用输出参数调用反射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我?我正在试图用反射调用一个成员,但是这个成员需要两个参数,第一个参数是一个字符串,第二个是一个 引用数据集(输出参数)。参数必须在一系列对象中传递 。 我尝试过这样的事情: object [] parameters = new object [2]; parameters [0] =" text"; DataSet DS = new DadaSet(); parameters [1] = DS; Myclass.InvokeMember(" MyMethod",BindingFlags.Invok eMethod,null, obj,参数); 但它确实有效吗?因为数组的第二项(参数[1]) 应该是对数据集的引用....我怎样才能解决这个问题? 谢谢

Hi, I?′m triying to invoke a member using reflection, but this member requiere two parameters, the first patrameter is a string and the second is a reference to a dataset (output parameter). The parameters has to be passed in an array of objects. I?′ve tried something like this: object[] parameters = new object[2]; parameters [0] ="text"; DataSet DS=new DadaSet(); parameters [1]= DS; Myclass.InvokeMember("MyMethod",BindingFlags.Invok eMethod,null, obj,parameters ); But it does?′nt work because the second item of the array (parameters[1]) should be a refference to a dataset.... How can I solve this problem? Thanks

推荐答案

嗨Gus, 试试这个样本: 使用System; 使用System.Collections; 使用System.Reflection; 公共类MyClass { 公共类TestClass { public void MyMethod(out int x){ x = 42; } } $ / $ public static void Main(){ TestClass testClass = new TestClass(); MethodInfo methodInfo = typeof(TestClass ).GetMethod(MyMethod, new Type [] {Type.GetType(" System.Int32&")}); object [] parameters = new object [1]; methodInfo.Invoke(testClass,parameters); Console.WriteLine(parameters [0]); Console.ReadLine(); } } Oliver Sturm - omnibus ex nihilo ducendis sufficit unum 插入空格以防止谷歌电子邮件销毁: MSN oliver @ sturmnet Jabber sturm @ amessage .de ICQ 27142619 www.sturmnet/博客 Hi Gus, try this sample: using System; using System.Collections; using System.Reflection; public class MyClass { public class TestClass { public void MyMethod(out int x) { x = 42; } } public static void Main() { TestClass testClass = new TestClass(); MethodInfo methodInfo = typeof(TestClass).GetMethod("MyMethod", new Type[] { Type.GetType("System.Int32&") }); object[] parameters = new object[1]; methodInfo.Invoke(testClass, parameters); Console.WriteLine(parameters[0]); Console.ReadLine(); } } Oliver Sturm -- omnibus ex nihilo ducendis sufficit unum Spaces inserted to prevent google email destruction: MSN oliver @ sturmnet Jabber sturm @ amessage.de ICQ 27142619 www.sturmnet/blog

Gus, 你将不得不使用InvokeMember的重载来获取一个 ParameterModifier实例。这将告诉反思注意 ref / out参数并修改对象数组(如果有ref / out 参数)。 你的电话应该是这样的。 //设置参数修饰符。 ParameterModifier [] mods = new ParameterModifier [2 ] {new ParameterModifier(), new ParameterModifier()}; //设置允许修改的第二个参数。 mods [1] [0] = true; //拨打电话。 Myclass.InvokeMember(" MyMethod",BindingFlags) .InvokeMethod,null,obj, 参数,mods,null,null); 希望这会有所帮助。 - - Nicholas Paldino [.NET / C#MVP] - mv * @ spam .guard.caspershouse " Gus" < Gu*@discussions.microsoft>在消息中写道 新闻:AC ********************************** @ microsof t ... Gus, You will have to use the overload of InvokeMember that takes an array of ParameterModifier instances. This will tell reflection to pay attention to ref/out parameters and modify the array of objects if there is a ref/out parameter. Your call should be something like this. // Set up the parameter modifiers. ParameterModifier[] mods = new ParameterModifier[2]{new ParameterModifier(), new ParameterModifier()}; // Set the second parameter to be allowed to be modified. mods[1][0] = true; // Make the call. Myclass.InvokeMember("MyMethod", BindingFlags.InvokeMethod, null, obj, parameters, mods, null, null); Hope this helps. -- - Nicholas Paldino [.NET/C# MVP] - mv*@spam.guard.caspershouse "Gus" <Gu*@discussions.microsoft> wrote in message news:AC**********************************@microsof t... 我正在试图用反射来调用一个成员,但这个成员需要两个参数,第一个参数是一个字符串而且第二个是对数据集(输出参数)的引用。参数必须在一系列对象中传递 我尝试过这样的事情: object [] parameters = new对象[2]; 参数[0] =" text"; DataSet DS = new DadaSet(); 参数[1] = DS; Myclass.InvokeMember(" MyMethod",BindingFlags.Invok eMethod,null, obj,参数); 但它不起作用,因为第二数组的项目(参数[1])应该是对数据集的引用....如何解决这个问题?谢谢 Hi, I′m triying to invoke a member using reflection, but this member requiere two parameters, the first patrameter is a string and the second is a reference to a dataset (output parameter). The parameters has to be passed in an array of objects. I′ve tried something like this: object[] parameters = new object[2]; parameters [0] ="text"; DataSet DS=new DadaSet(); parameters [1]= DS; Myclass.InvokeMember("MyMethod",BindingFlags.Invok eMethod,null, obj,parameters ); But it does′nt work because the second item of the array (parameters[1]) should be a refference to a dataset.... How can I solve this problem? Thanks

很棒,看起来比我的解决方案更清洁。 Oliver Sturm - omnibus ex nihilo ducendis sufficit unum 插入空格以防止谷歌电子邮件销毁: MSN oliver @ sturmnet Jabber sturm @ amessage.de ICQ 27142619 www.sturmnet/blog Great, that looks cleaner than my solution. Oliver Sturm -- omnibus ex nihilo ducendis sufficit unum Spaces inserted to prevent google email destruction: MSN oliver @ sturmnet Jabber sturm @ amessage.de ICQ 27142619 www.sturmnet/blog

更多推荐

使用输出参数调用反射

本文发布于:2023-11-11 18:35:27,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:反射   参数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!