Вопрос по naming-conventions, private-members, c# – Это определенно не происходит от Java. В C / C ++ идентификаторы, начинающиеся с подчеркивания, обычно зарезервированы для компилятора.

25

рвых, я знаю, что этот вопрос задавался несколько раз и что в конечном итоге это в основном вопрос личных предпочтений, но, читая все темы по этому вопросу, некоторые вещи мне не понятны.

По сути, большинство людей согласны, по крайней мере, с тем, что публичный член должен быть PascalCased, а приватный член должен быть lowerCamelCased.

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

Обоснование отказа от префикса заключается в том, что вы должны использовать это. вместо префикса.

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

Давайте представим класс Customer, который выглядит так:

class Customer
{
    private int age;

    public int Age
    {
        get { return this.age; }
        set { this.age = value; }
    }
}

(Очевидно, в таком простом случае я мог бы использовать autoproperty, но это только пример).

Если бы я добавил второе свойство внутри этого класса, ничто не помешало бы мне ссылаться на него, используя this.Age (публичное свойство), а не this.age (приватное поле). Иногда это может быть даже целесообразно, если на уровне получателя применяется некоторая проверка или форматирование.

Кроме того, если бы некоторые другие свойства моего класса требовали изменения возраста клиента, имело бы смысл использовать свойство, а не вспомогательное поле напрямую, поскольку установщик мог бы также реализовать некоторые проверки бизнес-правил, верно?

Другими словами, я действительно не понимаю, как ключевое слово this позволяет избежать путаницы между частными участниками поддержки и общедоступными свойствами, поскольку это можно использовать в обоих случаях, а IntelliSense показывает оба?

Благодарю.

Ваш Ответ

2   ответа
14

С помощьюthis способ убедиться, что вы используете член класса, в случае конфликта имен (скажем, имя параметра, идентичное имени поля).

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

53

_" для частных полей, даже если оно не соответствует соглашениям MS:

Устраняет конфликты с именами параметров в верблюжьем корпусе - не нужно использовать «this»

Это визуальный индикатор того, что внутреннее постоянное состояние объекта читается или, что более важно, записывается. Это флаг, говорящий«у этого есть побочные эффекты вне определенного метода, на который я смотрю», что очень важно знать, глядя на незнакомый код.

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