Использовать или не использовать квалификатор 'this' в С#

Возможный дубликат:
Когда вы используете ключевое слово "this" ?

Я только что начал использовать Resharper для анализа моего кода, и есть много вещей, которые он предложил, и я очень доволен его выходом, поскольку он также учит меня нескольким лучшим методам для выполнения вещей.

Очевидно, что его предложения могут быть проигнорированы, и один из них я просто хотел бы получить некоторые отзывы от сообщества!

Я всегда предпочитал использовать квалификатор 'this' для свойств, принадлежащих текущему классу (например, this.Name). Никакой реальной причины - я просто, похоже, принял это много лет назад.

Resharper предполагает, что это избыточно и, возможно, я должен удалить его.

Как вы думаете?

Ответ 1

Одна из важных вещей, которую следует помнить, заключается в том, что this удаляется компилятором, и поэтому это просто вопрос "что вам нравится и кто с вами делится кодом?". Это повлияет на производительность, а не на whit.

Ответ 2

Предпочтительно, я использую this только для предотвращения неоднозначности между (возможно) свойством и параметром функции

public class thing
{

   private string name;

   public thing(string name)
   {
       this.name = name; // will set private string name to param string name
   }

}

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

Так что я думаю, что ReSharper в этом прав.

Ответ 3

Я нахожу его избыточным, особенно с четко определенным стандартом кодирования:

Name // Property
_name // Member field
name // local variable

Используя this.<whatever>, похоже, больше работает.

Ответ 4

Я лично считаю, что хорошая практика использования ключевого слова this, потому что он четко отмечает, что proredty/method/etc принадлежит экземпляру объекта или нет. Это особенно полезно, когда частные члены называются так, что локальные переменные неотличимы от частных членов:

/// some pretty long method
/// ...
frameCount += 1; // is it private memeber or some local defined above?

Излишне говорить, что, вероятно, лучше не использовать его вообще, чем использовать непоследовательно.

Однако я нахожу, что постоянное использование this делает код "шумным" с this непонятным distractor. ИМО лучше использовать специальное _ префиксное имя для частных членов:

/// some pretty long method
/// ...
_frameCount += 1; // it clearly private memeber!

он также намного быстрее печатает.

Ответ 5

Одно из преимуществ использования этого. является intellisense. Он сужает список вещей, которые вы могли бы выбрать быстрее.

Ответ 6

Это технически избыточно, но StyleCop (если вы придирчивы и используете полный набор стандартов кодирования Microsoft) говорит, что вы должны его использовать.

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

Ответ 7

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