Что является хорошим правилом для добавления участников с помощью 'this' (С#)?

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

Я не спрашиваю о случаях, когда это требуется, например, в случае, когда локальная переменная имеет то же имя. Я говорю о случаях, когда смысл точно такой же. Что более читаемо? Существуют ли какие-либо стандарты, лучшие практики или эмпирические правила, которые я должен соблюдать? Должна ли она быть последовательной во всем классе или всей кодовой базе?

Ответы

Ответ 1

Я рекомендую использовать рекомендации Microsoft, как проверено StyleCop: http://blogs.msdn.com/sourceanalysis/

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

Вот правило непосредственно из 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.

Ответ 2

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

Добавление this везде не обязательно и часто просто добавляет беспорядок. Это не улучшает производительность, и я не уверен, что добавление this по всему коду также улучшает читаемость.

Вы могли бы услышать аргументы, что он делает более понятным, где определена переменная, но я бы сказал, что если ваш класс/метод настолько длинный и сложный, что трудно работать там, где что-то объявлено, то вам, вероятно, следует реорганизовать это так или иначе. Если вы используете правило единой ответственности и имеете короткие функции, должно быть очевидно, является ли переменная членом, параметром функции или локальной переменной.

Как вы указываете, иногда это необходимо. Например, в конструкторе, если вы хотите установить частный член с тем же именем, что и параметр.

public class Foo
{
    private Bar bar;

    public Foo(Bar bar)
    {
        this.bar = bar;
    }
}

Ответ 3

Я бы сказал, избегайте как можно больше, это избавит вас от некоторых (на самом деле много) ввода.

Я бы зависеть от Visual Studio больше, чтобы помочь мне найти, что принадлежит (никогда не забывайте F12). Я не использую блокнот для чтения моих файлов cs: P

Ответ 4

Если вы следуете Microsoft StyleCop, вы всегда должны использовать члены класса префикса с ключевым словом this.

SA1101: ПрефиксLocalCallsWithThis
ТипName: ПрефиксLocalCallsWithThis
CheckId: SA1101 Категория: правила удобочитаемости

Здесь fooobar.com/questions/95138/... по той же теме.

Ответ 5

Обычно я получаю доступ к параметрам текущего объекта. Учитывая соглашение об именах для переменных экземпляра "m_", это позволяет легко увидеть, на что влияют следующие утверждения, не зная их контекста:

m_Height += 10;    // an instance variable
height += 10;      // a local variable
this.Height += 10; // a property

Ответ 6

В моем коде я использую только это. <PropertyName> когда свойство является членом базового класса, а не классом, в котором я сейчас.

Конечно, не использование 'this' вообще - еще один популярный выбор, поскольку он добавляет ненужный код.

Ответ 7

В наших стандартах кодирования указывается, что переменные-члены не должны иметь префикс "m" или "_" или что-то еще, что используется большинством людей. Я на самом деле все время использовал это. Я предпочитаю ясность в отношении небольшого дополнительного ввода текста. И, как упоминалось в других ответах, это необходимо при ссылке на параметры с тем же именем, что и переменные-члены.

Ответ 8

Если вы используете Visual Studio и Intellisense. Когда вы вводите это, вы получаете список только ваших методов переменных уровня класса и т.д. Оставляя все другие возможные элементы.