Используйте это. получить доступ к внутренним участникам класса?

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

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

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

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

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

5
задан durron597 25 July 2015 в 18:40
поделиться

10 ответов

о чем следует подумать:

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

{{1} }
1
ответ дан 18 December 2019 в 07:29
поделиться

В StyleCop есть правило, требующее этого - люди, похоже, просто используют его ;)

4
ответ дан 18 December 2019 в 07:29
поделиться

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

0
ответ дан 18 December 2019 в 07:29
поделиться

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

3
ответ дан 18 December 2019 в 07:29
поделиться

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

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

1
ответ дан 18 December 2019 в 07:29
поделиться

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

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

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

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
ответ дан 18 December 2019 в 07:29
поделиться

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

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

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

9
ответ дан 18 December 2019 в 07:29
поделиться

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

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

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

1
ответ дан 18 December 2019 в 07:29
поделиться

IMO:

this._member 

избыточно

, тогда как

this.Property

допустимо.

2
ответ дан 18 December 2019 в 07:29
поделиться

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

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

0
ответ дан 18 December 2019 в 07:29
поделиться
Другие вопросы по тегам:

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