看到鞠强兄的帖子Reflection中对于out类型的获取,觉得大家使用Reflection时忘记了一个非常强大的函数InvokeMember,而是先获取一个MethodInfo或PropertyInfo对象,然后再调用相应的方法。其实直接调用InvoeMember方法更简单、更高效、通用性更强。再加上我以前发的帖子通过反射调用COM对象 中的写的Variant包装类,解决这个问题就非常简单了。看来把Reflection的操作包装一下俺还是有先见之明的。
代码如下:
Using directives

namespace ConsoleApplication1
{
class Test
{
public void SetValue(string value1, out string value2)
{
value2 = "hello";
}

public void SetValue(string value1)
{

}

}
class Program
{
static void Main(string[] args)
{
Variant v = Variant.CreateInstance("ConsoleApplication1.Test");

object[] paras = new object[] { "xxx", null };

object o = v.InvokeMethod("SetValue", paras);
Console.WriteLine(paras[1]);
}
}
}
代码如下:
Using directives
namespace ConsoleApplication1
{
class Test
{
public void SetValue(string value1, out string value2)
{
value2 = "hello";
}
public void SetValue(string value1)
{
}
}
class Program
{
static void Main(string[] args)
{
Variant v = Variant.CreateInstance("ConsoleApplication1.Test");
object[] paras = new object[] { "xxx", null };
object o = v.InvokeMethod("SetValue", paras);
Console.WriteLine(paras[1]);
}
}
}

浙公网安备 33010602011771号