Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2011, 15:49   #1
Xanex
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 22
По умолчанию Рефлексия

Добрый день. Возникла проблема. Необходимо с помощью рефлексии вызвать такой метод

Код:
private void PrintValue(ref string s, ref int i, double d, DateTime dt, bool b)
{
	Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}", s, i, d, dt.ToString(), b);
}
Проблема в том, что не знаю как сделать это с ref параметрами. Для обычного случая использовал BindingFlags, и private метод спокойно работал. Но когда в качестве параметра ref, то вылетает ошибка.

Т.е., когда я пытаюсь получить метод, я получаю null значение

Код:
var method = t.GetMethod("PrintValue", BindingFlags.NonPublic);
К слову, пробовал различные варианты BindingFlags от безысходности )
Xanex вне форума Ответить с цитированием
Старый 28.07.2011, 21:26   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

По идее нужно еще BindingFlags.Instance указывать:

Код:
BindingFlags flags = (BindingFlags)(BindingFlags.NonPublic | BindingFlags.Instance);
MethodInfo m = typeof(test).GetMethod("PrintValue", flags);
alexBlack вне форума Ответить с цитированием
Старый 29.07.2011, 11:20   #3
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Попробуй так:
Код:
Type[] paramTypes = new Type[] {typeof(string), typeof(int), typeof(double), typeof(DateTime),typeof(bool))};
 MethodInfo mi = typeof(test).GetMethod("PrintValue", paramTypes );
Hollander вне форума Ответить с цитированием
Старый 29.07.2011, 13:16   #4
Xanex
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 22
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
По идее нужно еще BindingFlags.Instance указывать:

Код:
BindingFlags flags = (BindingFlags)(BindingFlags.NonPublic | BindingFlags.Instance);
MethodInfo m = typeof(test).GetMethod("PrintValue", flags);
Пробовал так, тоже null получал, а не метод

Цитата:
Сообщение от Hollander Посмотреть сообщение
Попробуй так:
Код:
Type[] paramTypes = new Type[] {typeof(string), typeof(int), typeof(double), typeof(DateTime),typeof(bool))};
 MethodInfo mi = typeof(test).GetMethod("PrintValue", paramTypes );
и так пробовал, тоже самое, что и в прошлом случае. Хотя если в forech под GetMethods пробежаться, с BindingFlags: Instance, NonPublic, то видит прекрасно 2 private метода
Xanex вне форума Ответить с цитированием
Старый 29.07.2011, 14:54   #5
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Код:
Type[] paramTypes = new Type[] {typeof(string).MakeByRefType(), typeof(int).MakeByRefType(), typeof(double), typeof(DateTime),typeof(bool))};
 MethodInfo mi = typeof(test).GetMethod("PrintValue", paramTypes );
Hollander вне форума Ответить с цитированием
Старый 29.07.2011, 19:05   #6
Xanex
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Hollander Посмотреть сообщение
Код:
Type[] paramTypes = new Type[] {typeof(string).MakeByRefType(), typeof(int).MakeByRefType(), typeof(double), typeof(DateTime),typeof(bool))};
 MethodInfo mi = typeof(test).GetMethod("PrintValue", paramTypes );
Тоже не помогает )
Xanex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц