Есть ли причины не использовать «это» («Я», «Я», ...)? - PullRequest
10 голосов
/ 02 декабря 2008

Я прочитал этот ответ и его комментарии, и мне любопытно: есть ли причины не использовать this / Self / Me?

Кстати: извините, если раньше об этом спрашивали, кажется, что невозможно найти слово this на SO.

Ответы [ 15 ]

0 голосов
/ 02 декабря 2008

Мало того, что я часто использую «это». Я иногда использую «это».

class Foo
{
    private string bar;

    public int Compare(Foo that)
    {
        if(this.bar == that.bar)
        {
            ...

И так далее. «То» в моем коде обычно означает другой экземпляр того же класса.

0 голосов
/ 02 декабря 2008

В типичном методе сеттера (взято из ответа Лагердалека):

string name;

public void SetName(string name)
{
     this.name = name;
}

Если вы не используете его, компилятор не узнает, что вы ссылаетесь на переменную-член.
Использование this. предназначено для указания компилятору, что вам необходим доступ к переменной-члену, что находится за пределами непосредственной области применения метода. Создание переменной внутри метода, имя которой совпадает с именем переменной-члена, является абсолютно допустимым, точно так же как переопределение метода в классе, который расширил другой класс, является совершенно допустимым.
Однако, если вам все еще нужно использовать метод суперкласса, вы используете super. На мой взгляд, используя это. не хуже, чем при использовании супер. и дает программисту больше гибкости в их коде.

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

0 голосов
/ 02 декабря 2008

В VB.NET одной из распространенных практик, которую я использую, является следующий код:

Class Test
    Private IntVar AS Integer
    Public Function New(intVar As Integer)
       Me.Intvar = intvar
    End Function    
End Class

Не все время, но в основном Я / это / я весьма полезно. Уточняет объем, о котором вы говорите.

0 голосов
/ 02 декабря 2008

В конце концов, это всегда вопрос личного выбора. Лично я использую это соглашение о кодировании:

public class Foo
{
  public string Bar
  {
    get
    {
      return this.bar;
    }
    /*set
    {
      this.bar = value;
    }*/
  }
  private readonly string bar;

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

Так что для меня «это» действительно необходимо, чтобы конструктор читался.

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

0 голосов
/ 02 декабря 2008

для меня я использую this для вызова методов экземпляра объекта, тогда как self для статического метода

...