Если не ИСПОЛЬЗОВАТЬ 'это' ключевое слово?

Извините за выяснение у него снова, уже существуют некоторые вопросы об этом ключевом слове. Но все они говорят цель об 'этом'.

Когда делают Вы используете это ключевое слово
C#, когда использовать это ключевое слово
Использование “этого” ключевого слова в формальных параметрах для статических методов в C#
Надлежащее использование “этого”. ключевое слово в C#?

Мой вопрос состоит в том, чтобы если не использовать 'это' ключевое слово.
ИЛИ
Все это право всегда использовать это ключевое слово в ситуации как код

class RssReader
{
    private XmlTextReader _rssReader;
    private XmlDocument _rssDoc;
    private XmlNodeList _xn;

    protected XmlNodeList Item { get { return _xn; } }
    public int Count { get { return _count; } }

    public bool FetchFeed(String url)
    {
        this._rssReader = new XmlTextReader(url);
        this._rssDoc = new XmlDocument();
        _rssDoc.Load(_rssReader);
        _xn = _rssDoc.SelectNodes("/rss/channel/item");
        _count = _xn.Count;
        return true;
    }
}

здесь я не использовал 'это' с "_xn" и "_count" также не с "_rssDoc. Загрузка (_rssReader)"; прекрасен это? Я должен использовать "это" со всеми случаями переменных класса в классе?

Править: Действительно ли бесполезно использовать 'это' в классе для его собственных переменных?

12
задан Community 23 May 2017 в 12:16
поделиться

10 ответов

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

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

Если вы работаете с существующим кодом, следуйте принятым там правилам, в противном случае выбирайте то, что делает вас наиболее продуктивным и эффективным.

16
ответ дан 2 December 2019 в 02:52
поделиться

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

9
ответ дан 2 December 2019 в 02:52
поделиться

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

Кроме того, это предотвращает появление ошибок при добавлении новой локальной переменной, скрывающей поле.

internal sealed class Foo
{
    private Int32 bar = 42;

    private void Bar()
    {
        // Uncommenting the following line will change the
        // semantics of the method and probably introduce
        // a bug.  
        //var bar = 123;

        Console.WriteLine(bar);

        // This statement will not be affected.
        Console.WriteLine(this.bar);
    }
}

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

23
ответ дан 2 December 2019 в 02:52
поделиться

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

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

3
ответ дан 2 December 2019 в 02:52
поделиться

Следует ли мне использовать "this" со всеми вхождениями переменных класса внутри класса?

В вашем конкретном случае НЕТ.

Рассмотрим, однако, следующий пример:

class RssReader
{
    private String url;

    public bool FetchFeed (String url)
    {
        new XmlTextReader (url);

        // vs.

        new XmlTextReader (this.url);

        return true;
    }
}

Здесь вам нужно указать this для доступа к переменной экземпляра, имя которой совпадает с именем аргумента метода.

3
ответ дан 2 December 2019 в 02:52
поделиться

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

3
ответ дан 2 December 2019 в 02:52
поделиться

Что ж, как по мне, 'this' выглядит действительно излишним при использовании с именами, начинающимися с "_". Однако в вашем примере это абсолютно законно.

1
ответ дан 2 December 2019 в 02:52
поделиться

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

13
ответ дан 2 December 2019 в 02:52
поделиться

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

2
ответ дан 2 December 2019 в 02:52
поделиться

Ничего страшного. Тем более, что у вашего класса нет базового класса, а частные поля названы соответствующим образом. ReSharper считает это в вашем случае избыточным.

3
ответ дан 2 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

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