Если я получаю доступ к членскому полю, свойству или методу, я никогда не уверен, когда я должен предварительно ожидать его с 'этим'.
Я не спрашиваю о случаях, где требуется, как в случае, где локальная переменная имеет то же имя. Я говорю о случаях, где значение является точно тем же. Который более читаем? Есть ли какие-либо стандарты, лучшие практики или эмпирические правила, за которыми я должен следовать? Это должно просто быть последовательно всюду по классу или всей кодовой базе?
Я рекомендую использовать гу от Microsoft idelines, как проверено StyleCop: http://blogs.msdn.com/sourceanalysis/
Общее правило - добавлять к членам "this.", когда они определены в классе, если они не являются статическими, в этом случае вы не можете.
Вот правило непосредственно из StyleCop:
SA1101: The call to {method or property name} must begin with the
'this.' prefix to indicate that the item is a member of the class.
Я бы сказал, избегайте как можно больше, это избавляет вас от некоторого (на самом деле большого) набора текста.
Я бы больше полагался на Visual Studio, чтобы помочь мне найти то, что принадлежит (никогда не забывайте F12). Я не использую блокнот для чтения моих файлов cs: P
Если вы используете Visual Studio и Intellisense. Когда вы набираете это, вы получаете список только методов переменных уровня вашего класса и т. Д. Без всех остальных возможных элементов.
Наши стандарты кодирования в работе гласят, что переменные-члены не должны начинаться с префикса «m» или «_ »или чего-то еще, что использует большинство людей. Я на самом деле обнаружил, что постоянно использую this.memberVariable. Я предпочитаю ясность, а не лишний набор текста. И, как упоминалось в других ответах, это необходимо при ссылке на параметры с тем же именем, что и переменные-члены.
Я не согласен со StyleCop по этому поводу, и я даже не уверен, что мнение StyleCop в любом случае следует интерпретировать как официальное руководство Microsoft. Это был внутренний инструмент Microsoft, но не все команды используют его, и не все команды используют все правила.
Добавление этого
повсюду необязательно и часто просто добавляет беспорядка. Это не улучшает производительность, и я не уверен, что добавление this
по всему коду также улучшает читаемость.
Вы можете услышать аргументы, которые проясняют, где определена переменная, но я бы сказал, что если ваш класс / метод настолько длинный и сложный, что трудно понять, где что-то объявлено, вам, вероятно, следует провести рефакторинг это все равно. Если вы используете правило единственной ответственности и имеете короткие функции, должно быть очевидно, является ли переменная членом, параметром функции или локальной переменной.
Как вы отметили, иногда это необходимо. Например, в конструкторе, если вы хотите установить закрытый член с тем же именем, что и параметр.
public class Foo
{
private Bar bar;
public Foo(Bar bar)
{
this.bar = bar;
}
}
В моем коде я использую только this.
Конечно, не использовать this вообще - еще один популярный выбор , поскольку добавляется ненужный код.
Если вы последуете Microsoft StyleCop , вы всегда должны использовать префиксные члены класса с ключевым словом this
.
SA1101: PrefixLocalCallsWithThis
TypeName: PrefixLocalCallsWithThis
CheckId: SA1101 Категория: Правила удобочитаемости
Вот аналогичный вопрос StackOverflow по той же теме .
Я обычно обращаюсь к параметрам текущего объекта с этим. Учитывая соглашение об именах для переменных экземпляра «m_», это позволяет с первого взгляда увидеть, на что влияют следующие операторы, не зная их контекста:
m_Height += 10; // an instance variable
height += 10; // a local variable
this.Height += 10; // a property