Использовать этот. получить доступ к внутренним членам класса? - PullRequest
5 голосов
/ 17 марта 2010

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

private String _whatever;
public String Whatever
{
  get
  {
    return this._whatever;
  }
  set
  {
    this._whatever = value;
  }
}

public void DoSomething()
{
  String s = this.Whatever;
  this.DoSomething();
}

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

Интересно, зачем это делать? Чтобы добавить больше ясности к источнику?
Или это просто пустая трата пространства?

Ответы [ 10 ]

9 голосов
/ 17 марта 2010

Все сводится к личным предпочтениям и хорошим практикам.

В большинстве случаев это не имеет значения, но может иметь значение, когда у вас есть параметр с тем же именем, что и у частного поля (что в любом случае указывает на плохое соглашение об именах).

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

4 голосов
/ 17 марта 2010

В StyleCop есть правило, согласно которому люди просто используют его;)

3 голосов
/ 17 марта 2010

Странно, никто не упоминает об этом: он так хорошо работает с IntelliSense. Типа "это". и всплывающий список допустимых имен членов. У меня не заняло много времени, чтобы доказать, что «хорошо, это делает область видимости идентификатора очевидной»

2 голосов
/ 17 марта 2010

IMO:

this._member 

избыточно

, тогда как

this.Property

оправдано.

1 голос
/ 17 марта 2010

что-то рассмотреть:

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

1 голос
/ 17 марта 2010

Использование this в этом контексте не является обязательным, но это помогает устранить неоднозначность. Генераторы кода всегда будут использовать this, что гораздо проще, чем выяснить, если это необходимо (что редко)

Программисты используют это как дело вкуса.

1 голос
/ 17 марта 2010

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

  • Если вы используете соглашение о том, чтобы ставить подчеркивание перед частными переменными, пишите this.
  • Это лишнее перед вызовами методов
  • Это спорно, имеет ли смысл перед доступом объекта

В общем, это вопрос личного мнения (хотя, как и во всем остальном, вы должны быть последовательными и соглашаться со своими коллегами).

0 голосов
/ 17 марта 2010

Это для обработки следующей возможной ситуации:

private String value;
public String Whatever
{
    get
    {
        return this.value;
    }
    set
    {
        this.value = value;
    }
}

На самом деле, this. широко используется в ситуациях, подобных примеру ниже:

struct MyStruct
{
    private int val1;
    private int val2;

    public MyStruct(int val1, int val2)
    {
        this.val1 = val1;
        this.val2 = val2;
    }
}

Использование this. по возможности делает ваш код более понятным и исключает следующую возможную ошибку:

private int myVar;
private void doSmth(int myVar)
{
    // Some code here ...
    myVar = 5; // Are you sure this is one you want to modify?
    // Some code here ...
}

Однако это не строгое правило и, вероятно, связано со стилем персонального кодирования.

0 голосов
/ 17 марта 2010

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

Кроме того, если вы не различаете переменные-члены и параметры или локальные переменные, как в вашем примере с подчеркиванием, это полезно. Просто вопрос стиля.

0 голосов
/ 17 марта 2010

Это вопрос вкуса. Некоторые разработчики обычно this используют, чтобы показать, что указанный объект является внутренним объектом класса. Это просто синтетический сахар. Также это зависит от некоторых соглашений об именах в проекте (например, начиная каждое имя поля с подчеркивания).

...