C#, когда использовать “это” ключевое слово [дубликат]

Вы можете просто проверить, равен ли элемент id свойству id некоторого элемента из set

return !set.contains { [110].id == entry.id }
25
задан Community 23 May 2017 в 11:53
поделиться

8 ответов

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

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

Моя версия вашего класса:

class Life
{
    //Fields
    private string person;
    private string partner;

    //Properties
    public string Person
    {
        get { return this.person; }
        set { this.person = value; }
    }

    public string Partner
    {
        get { return this.partner; }
        set { this.partner = value; }
    }


    public Life()
    {
        this.person = "Dave";
        this.partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }
}

или, что еще лучше, но не так ясно об использовании this с полями.

class Life
{

    //Properties
    public string Person { get; set; }
    public string Partner { get; set; }

    public Life()
    {
        this.Person = "Dave";
        this.Partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }
}
23
ответ дан 28 November 2019 в 20:49
поделиться

«this» также используется в .Net 3.5 с методами расширения:

public static class MyExtensions
{    
    public static string Extend(this string text)
    {
       return text + " world";
    }
}

расширит класс строк

var text = "Hello";
text.Extend();

Чтобы ответить на ваш вопрос: нет, нет Разница в ваших двух конструкторах. Imo, «this» загромождает код и должен использоваться только при необходимости, например, когда параметры и переменные поля имеют одинаковые имена.

Существует также случай, когда класс явно реализует интерфейс. Если вам нужно вызвать методы интерфейса из вашего класса, вам нужно привести его к интерфейсу:

class Impl : IFace
{

    public void DoStuff()
    {
        ((IFace)this).SomeMethod();
    }

    void IFace.SomeMethod()
    {
    }
}
13
ответ дан Peter Lillevold 28 November 2019 в 20:49
поделиться

Оба конструктора в любом случае делают одно и то же, во втором из них this является избыточным

1
ответ дан Hannoun Yassir 28 November 2019 в 20:49
поделиться

Вы не должны использовать закрытые переменные _person и _parter. Это цель ваших добытчиков и сеттеров.

Что касается конструкций, то между ними нет реальной разницы. Тем не менее, я всегда предпочитаю использовать ключевое слово This, поскольку оно способствует удобочитаемости.

0
ответ дан hmcclungiii 28 November 2019 в 20:49
поделиться

Нет никакой разницы в двух утверждениях ...

//These are exactly the same.

this._person 

//and 

_person 

Ссылка на "this" подразумевается в случае _person. Я бы не сказал, что это обязательно «лучшая» практика кодирования, я бы сказал, что это просто предпочтение.

7
ответ дан 28 November 2019 в 20:49
поделиться

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

0
ответ дан 28 November 2019 в 20:49
поделиться

Поскольку вы используете символы подчеркивания, между именами нет конфликта; поэтому " this. " является избыточным и может быть опущено. IL не будет затронут.

Пока нет двусмысленности между полем и переменной / параметром, существует только один сценарий, в котором ключевое слово this (в контексте значения текущего экземпляра - not ctor-chaining) строго необходимо - вызов метода расширения, который определяется отдельно:

this.SomeExtensionMethod();  // works
SomeExtensionMethod();  // fails
3
ответ дан 28 November 2019 в 20:49
поделиться
Другие вопросы по тегам:

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