MethodBase без отражения
Один из моих друзей сегодня рано утром (слишком рано, если вы спросите меня. Он берет меня Lil Bit, чтобы получить мой двигателей продолжается) спросил меня о получении настоящее выполнение метода информации. Ну, это довольно легко, правда? Мы System.Reflection, которая позволяет нам заглянуть в текущем коде информацию так, как получение методами имя в виде строки.
Мы просто сделать:
- . MethodBase . GetCurrentMethod ( ) Система. Отражение. MethodBase. GetCurrentMethod ()
Бам, у нас есть имя текущего метода. Но он хотел сделать это без отражения.
Ну, мы должны сделать что одной строки кода немного больше, учитывая, что ограничения, но в действительности это не так уж сложны. Мы знаем, что для каждого метода, который выполняется в произвольной потока у нас будет один из этих объектов StackFrame что прижимается к базе стека динамические структуры данных (т.е. мы Push StackFrame новый объект на Callstack). Те StackFrame объекты содержат всевозможные удовольствия информацию, и эта информация может быть извлечены и использованы по какой-либо интриги целью вы имеете в виду. Но помните, что многие методы информация содержится в файле отладки, поэтому, когда вы переходите на выпуске версии можно ускользают некоторые данные, которые вы для допроса.
Таким Во-первых, давайте производить новый объект StackFrame:
Теперь у нас есть StackFrame объект, и мы знаем, что StackFrame содержит всевозможные MethodBase информацию, которая может быть использована для гарнира информацию от.
Итак, давайте делать некоторым увлажняющим MethodBase:
- ; MethodBase MethodBase = stackFrame. GetMethod ();
Теперь, когда вы получили те, готовые идти, вы можете начать получать все самое интересное информация!
Например:
- ; MethodBase MethodBase = stackFrame. GetMethod ();
- ; Строка MethodName = MethodBase. Имя;
- ; BOOL isStaticMethod = MethodBase. IsStatic;
- ; BOOL isPublicMethod = MethodBase. IsPublic;
READY TO GO! ![]()
3 Комментариев »
RSS-канал для комментариев на эту должность. TrackBack URL































"Но он хотел сделать это без Отражение"
Так что же мы предположим StackFrame используется внутри чтобы получить эту информацию?
Если это для "образовательных целях" Я предполагаю, что это справедливый вопрос, но я бы выбрал System.Reflection.MethodBase.GetCurrentMethod ()
в любой день, прежде чем использовать StackFrame.
/ Jonas
Комментарии Йонаса - 7 Май, 2008 @ 1:52 вечера
[...] MethodBase без размышлений - Адам Buenz показывает альтернативную методику получения в MethodBase с помощью кадров стека. Я подвергаю сомнению, если это действительно отражение бесплатно - Я подозреваю, стека является использование Reflection - но оно иллюстрирует полезной функциональности stackframe. [...]
Pingback от Reflective Перспектива - Крис Alcock »The Morning Brew # 89 - 8 мая 2008 @ 12:35 утра
Спасибо! Это помогло мне greately. Мне нужно написать кусок кода, который показал бы мне, где процедура запускается с и я сделал это, создав своего рода вспомогательный метод StackTrace.
Джордж
Замечание Джорджа C # - 23 декабря 2008 @ 8:35 утра