在使用反射调用静态方法时,如何通过ref传递参数?

时间:2009-04-24 16:44:29

标签: c# .net reflection

我正在使用反射在对象上调用静态方法:

MyType.GetMethod("MyMethod", BindingFlags.Static).Invoke(null, new object[] { Parameter1, Parameter2 });

如何通过ref传递参数,而不是按值传递?我假设它们默认是按值计算的。第一个参数(数组中的“Parameter1”)应该是ref,但我无法弄清楚如何以这种方式传递它。

2 个答案:

答案 0 :(得分:16)

对于参考参数(或在C#中输出),反射会将新值复制到与原始参数相同位置的对象数组中。您可以访问该值以查看更改的参考。

public class Example {
  public static void Foo(ref string name) {
    name = "foo";
  }
  public static void Test() {
    var p = new object[1];
    var info = typeof(Example).GetMethod("Foo");
    info.Invoke(null, p);
    var returned = (string)(p[0]);  // will be "foo"
  }
}

答案 1 :(得分:1)

如果您致电Type.GetMethod并使用BindingFlag的{​​{1}},则无法找到您的方法。删除标记或添加BindingFlags.Static,它将找到静态方法。

BindingFlags.Public