Это недавно ударило меня по проекту, над которым я работал. Большинство людей знакомы с рекурсией собственности:
public int Test
{
get { return this.test; }
set { this.Test = value; }
}
private int test;
Вы случайно положили верхний регистр T в этот сеттер, и вы открыли себя до StackoverflowException
. Что еще хуже, если вы не определили его, часто визуальная студия автоматически исправит корпус для вас в недопустимом состоянии.
Я сделал что-то подобное, но в конструкторе в последнее время:
public TestClass(int test)
{
this.Test = Test;
}
К сожалению, здесь вы не получаете исключение StackOverflowException, теперь у вас есть ошибка программирования. В моем случае это значение было передано в WebService, который вместо этого использовал значение по умолчанию (которое не было 0), что заставило меня пропустить тот факт, что я неправильно назначил его. Все тесты интеграции прошли, потому что эта служба не говорила
"Эй, ты забыл это действительно важное поле!"
Какие шаги я могу предпринять, чтобы избежать такого поведения? Мне всегда советовали не определять такие переменные, как следующие, и мне они не нравятся лично, но я не могу придумать никаких других вариантов:
private int _test;
private int mTest;
ИЗМЕНИТЬ
Причины, что подчеркивание или префикс m нежелательны, как правило, я могу думать:
- читабельность
- Чуть сложнее прокручивать элементы, если вы наследуете от сторонних классов, когда вы получаете сочетание стилей.