Подтвердить что ты не робот

Как вы передаете параметры ref при вызове статического метода с использованием отражения?

Я вызываю статический метод для объекта с использованием отражения:

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

Как вы передаете параметры по ref, а не по значению? Я предполагаю, что они по умолчанию будут по стоимости. Первый параметр ( "Parameter1" в массиве) должен быть по ref, но я не могу понять, как передать его таким образом.

4b9b3361

Ответ 1

Для ссылочного параметра (или вне в С#) отражение будет копировать новое значение в массив объектов в том же положении, что и исходный параметр. Вы можете получить доступ к этому значению, чтобы увидеть измененную ссылку.

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"
  }
}

Ответ 2

Если вы вызываете Type.GetMethod и используете BindingFlag только BindingFlags.Static, он не найдет ваш метод. Удалите флаг или добавьте BindingFlags.Public, и он найдет статический метод.

public Test { public static void TestMethod(int num, ref string str) { } }

typeof(Test).GetMethod("TestMethod"); // works
typeof(Test).GetMethod("TestMethod", BindingFlags.Static); // doesn't work
typeof(Test).GetMethod("TestMethod", BindingFlags.Static
                                     | BindingFlags.Public); // works