Как вы передаете параметры ref при вызове статического метода с использованием отражения?
Я вызываю статический метод для объекта с использованием отражения:
MyType.GetMethod("MyMethod", BindingFlags.Static).Invoke(null, new object[] { Parameter1, Parameter2 });
Как вы передаете параметры по ref, а не по значению? Я предполагаю, что они по умолчанию будут по стоимости. Первый параметр ( "Parameter1" в массиве) должен быть по ref, но я не могу понять, как передать его таким образом.
Ответы
Ответ 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