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