Если вы смешаете Eser + gcores, вы получите:
private void Test(ref int i)
{
Console.WriteLine(i);
i++;
}
private void Test2(out int i)
{
i = 1000;
}
public void Method()
{
Type[] types = { typeof(int).MakeByRefType() };
MethodInfo methodInfo = GetType().GetMethod(nameof(Test), BindingFlags.NonPublic | BindingFlags.Instance, null, types, null);
int num = 10;
var pars = new object[] { num };
methodInfo.Invoke(this, pars);
Console.WriteLine(pars[0]);
MethodInfo methodInfo2 = GetType().GetMethod(nameof(Test2), BindingFlags.NonPublic | BindingFlags.Instance, null, types, null);
var pars2 = new object[1];
methodInfo2.Invoke(this, pars2);
Console.WriteLine(pars2[0]);
}
Обратите внимание на typeof(int).MakeByRefType()
и тот факт, что массив object[]
, содержащий параметры, изменяется вызываемым методом.Я добавил второй пример с out
, который показывает, что вы все еще используете .MakeByRefType()
, только вам не нужно инициализировать массив object[]
с параметром.И вы должны использовать именно то, что вам нужно BindingFlags
, а не бросать все BindingFlags
, содержащиеся в MSDN вместе.Статические и нестатические работы по-разному: -)