Что такое хорошее правило для того, когда предварительно ожидать участников с 'этим' (C#)?

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

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

15
задан noctonura 28 April 2010 в 18:08
поделиться

8 ответов

Я рекомендую использовать гу от 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.
13
ответ дан 1 December 2019 в 01:38
поделиться

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

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

4
ответ дан 1 December 2019 в 01:38
поделиться

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

0
ответ дан 1 December 2019 в 01:38
поделиться

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

0
ответ дан 1 December 2019 в 01:38
поделиться

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

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

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

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

public class Foo
{
    private Bar bar;

    public Foo(Bar bar)
    {
        this.bar = bar;
    }
}
15
ответ дан 1 December 2019 в 01:38
поделиться

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

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

0
ответ дан 1 December 2019 в 01:38
поделиться

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

SA1101: PrefixLocalCallsWithThis
TypeName: PrefixLocalCallsWithThis
CheckId: SA1101 Категория: Правила удобочитаемости

Вот аналогичный вопрос StackOverflow по той же теме .

1
ответ дан 1 December 2019 в 01:38
поделиться

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

m_Height += 10;    // an instance variable
height += 10;      // a local variable
this.Height += 10; // a property
1
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: