Я не знаю, изначально разработчики исходили из этого мышления, но для меня это имеет смысл.
Поскольку вы можете объявить метод только как тип void И он не можетбыть переопределенным И на него нельзя ссылаться как на часть интерфейса, компилятор может просто игнорировать метод, потому что он не будет иметь зависимостей, если указанный режим не соответствует.Если другой метод вызывает его в режиме несоответствия, компилятор может просто обработать его как недопустимый вызов метода, как если бы атрибута не было.
Пример Джона будет работать, но я бы сделал что-то вроде этого:
#if DEBUG
public static string TestStringForDebugOnly(...)
{
...
}
#endif
// Arguments are only for illustration.
public string CallingMethod(int id, string temp)
{
#if DEBUG
string result = TestStringForDebugOnly(id, temp);
#else
string result = TestString(id, temp);
#endif
return result;
}
Я бы потратил дополнительные усилия, чтобы обернуть весь код, связанный с DEBUG (включая вызовы отдельных методов), в директивы препроцессора по двум причинам.Во-первых, он предоставляет собственную встроенную документацию;Вы точно знаете, что должно выполняться, когда, где и почему.Во-вторых, если код необходимо изменить или удалить, объем поиска, который необходимо выполнить, значительно сокращается, наряду с необходимостью многократной компиляции и повторной компиляции, чтобы увидеть, что ломается.