2010-10-14 1 views
1

Есть ли способ узнать, вызван или нет метод C# объекта с использованием отражения?Есть ли способ узнать, вызван ли метод C# объекта или нет?

+3

Эластируйте пожалуйста. – 2010-10-14 08:43:03

+0

Мое предположение, что OP хочет AOP-подобный способ добавления кода для определения того, какие кодовые пути выполняются. –

+0

Спасибо всем за ваши ценные ответы. На самом деле мой сценарий довольно прост. Я работаю над существующим проектом, который использует следующий способ изменения значения в базе данных. Если свойство класса равно NULL, не изменяйте это значение в базе данных, так что клиент может инициализировать класс только с необходимыми свойствами изменения. Но иногда некоторое свойство может быть изменено на null, этот сценарий не будет поддерживаться в текущей логике. – fresky

ответ

0

Нет. Отражение только знает, как создается тип, а не как он вызван вашим приложением.

Вы можете создать массив из StackFrame внутри метода, чтобы узнать, как он был вызван.

Resharper может проверить, если метод вызывается или нет (это Визуальный плагин Студия)

+0

Я сомневаюсь, что Resharper может сказать с точностью 100%. –

+0

Я не утверждал, что это так, не так ли? Хотя он работает очень хорошо, пока все сборки находятся в одном и том же решении. – jgauffin

0

Если ваш вопрос о том, как узнать, когда будет ли назвать конкретный метод в любом случае и для любого входа, то отражение не может сделать это для вас.

Вам нужны инструменты для выполнения статического анализа программ, но они не предназначены для использования во время выполнения.

Если бы вы могли более подробно описать то, что вы пытаетесь выполнить, мы можем предложить альтернативу.

1

Один из способов узнать, вызван ли ваш метод, - использовать инструмент покрытия кода. Visual Studio Ultimate содержит такие инструменты, которые помогают определить покрытие кода. Сначала вы обрабатываете свой код, а затем запускаете свои тесты или обычно выполняете свое приложение, а затем проверяете свои результаты.

Или вы можете просто использовать текстовый редактор для поиска имени метода в исходном коде. (Это намного проще).

0

Если вы хотите найти какие-либо методы в своей сборке, которые никогда не вызываются какой-либо другой частью сборки, FxCop имеет правило «мертвого кода», которое найдет любые такие методы.

Поиск мертвого кода не включает методы, которые могут быть вызваны из внешнего мира, такие как общедоступные методы.

Смежные вопросы