Если вы хотите регистрировать вызовы методов, вы можете использовать AOP Framework, например PostSharp . Такие вещи, как принудительное выполнение предварительных / постусловий метода, лучше всего достигаются с помощью механизмов разработки по контракту, таких как новая библиотека Code Contracts , которая будет поставляться с .net4.0. Конечно, не имеет смысла просто проверять аргументы на null, поскольку это может быть допустимым значением в зависимости от метода. Внедрение Debug.Asserts в код может быть проблематичным, поскольку вы можете не захотеть / не иметь возможности обрабатывать исключения в исходной функции. Я думаю, что было бы непрактично, если не невозможно, создать общую структуру для такого рода вещей, поскольку требования будут сильно отличаться между проектами.
РЕДАКТИРОВАТЬ: Чтобы уточнить мой комментарий о добавлении отладочных утверждений в методы - я прочитал ваше предложение преобразовать тело метода во что-то вроде этого:
public void SomeMethod(args)
{
try
{
//original method body
}
catch(Exception ex)
{
Debug.Assert(false);
throw;
}
}
Проблема в том, что утверждения указывают на вещи, которые никогда не должны быть ложными - поэтому эта конструкция означает, что метод никогда не может выдавать, что в общем случае неверно. Теперь проблема в том, что если метод действительно выбрасывает, утверждение не будет выполнено, даже если вызывающий метод обрабатывает исключение соответствующим образом. Из вашего комментария кажется, что вы делаете что-то вроде этого:
public void SomeMethod(object arg)
{
Debug.Assert(arg != null);
if(arg == null) throw new ArgumentNullException("arg");
//rest of method
}
Это полезная практика, и я считаю, что библиотека контрактов кода поддерживает «унаследованную» проверку предварительных условий (генерирование исключений) в своем статическом анализе.