Правильное использование Отражения и привязки флагов
Я хочу изменить приведенный ниже код, чтобы иметь возможность использовать приватный метод
//use reflection to Load the data
var method =
typeof(MemberDataFactory)
.GetMethod("LoadData")
.MakeGenericMethod(new [] { data.GetType() })
.Invoke(this, null);
Я попытался следующее без удачи:
//use reflection to Load the data
var method =
typeof(MemberDataFactory)
.GetMethod("LoadData")
.MakeGenericMethod(new [] { data.GetType() })
.Invoke(this, BindingFlags.Instance | BindingFlags.NonPublic, null , null, null);
И что такое "var" с точки зрения этого кода? Я бы предпочел указывать его тип вместо использования var.
Спасибо!
1 ответ
Решение
Вы хотите использовать эту перегрузку Type.GetMethod()
, где вы передаете свои флаги привязки. По умолчанию .GetMethod(string)
ищет только общедоступные методы, поэтому возвращает нуль, отсюда и исключение нулевой ссылки.
Ваш код должен быть примерно таким:
var method =
typeof(MemberDataFactory)
.GetMethod("LoadData", BindingFlags.Instance | BindingFlags.NonPublic) // binding flags go here
...