Зачем мне помечать частные переменные как частные, если они уже таковы?

StackOverflow https://stackoverflow.com/questions/552857

  •  23-08-2019
  •  | 
  •  

Вопрос

Насколько я знаю, в C# все поля по умолчанию являются закрытыми, если не указано иное.

class Foo
{
  private string bar;
}

class Foo
{
  string bar;
}

Я думаю, эти два объявления равны.

Итак, мой вопрос:зачем мне помечать частные переменные как private если они уже являются частными?

Это было полезно?

Решение

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

Причины оставить это неявным:

  • Это означает, что существует большая разница для неприватных участников (или для чего-либо с большим доступом, чем по умолчанию);это подчеркивает разницу при чтении кода

Причины сделать это явным:

  • Некоторые разработчики могут не знать значения по умолчанию:сделать это явным означает, что это ясно каждый
  • Это показывает, что вы активно приняли решение, а не просто оставили его по умолчанию.

Эти последние пункты в основном те, что сделал Эрик Липперт когда мы обсуждали это некоторое время назад.

Другие советы

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

Что касается более широкой темы, я помню комментарий Эрика Липперта, в котором, по сути, говорилось, что для данного метода/класса/что угодно:

void Foo() {}
class Bar {}

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

Да, они равны, но мне нравится отмечать частные переменные как частный, Я думаю, это улучшает чтение.

также я использую это общее обозначение для частных членов, это очень полезно:

private string _bar;

Это чисто вопрос стандартов кодирования, но, чего бы это ни стоило, я всегда явно отмечаю частные члены как частные.

Если бы вы регулярно переключались между Java и C#, я думаю, было бы весьма важно указать явный модификатор доступа.Например, в Java

void myMethod()
{

}

любой класс в вашем пакете имеет доступ к этому методу.В C# это, очевидно, является частным для класса и внутренних классов.

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

Нет веской причины нет сделать это явным, и, по моему мнению, поддержка C# является ошибкой (особенно если они готовы сделать то же самое, что и для переключения операторов по той же причине)

Явное использование Private может улучшить читаемость в некоторых крайних случаях.

Пример:

        /*
        Tomorrow when we wake up from bed,
        first me and Daddy and Mommy, you, eat
        breakfast eat breakfast like we usually do,
        and then we're going to play and
        then soon as Daddy comes, Carl's going
        to come over, and then we're going to
        play a little while. And then Carl and
        Emily are both going down to the car
        with somebody, and we're going to ride
        to nursery school [whispered], and then
        when we get there, we're all going
        to get out of the car...
        */

        int spam;

        /*
        Does this style look at all familiar?
        It should!
        */

Глядя на этот фрагмент, вы можете быть не уверены, находитесь ли вы в области метода или класса.

Используя либо private или подчеркивание в имени поля (private int spam;, int spam_; или int _spam;) устранит путаницу.

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

Я думаю, что для удобства чтения всегда лучше быть явным.

Кроме того, вы можете взглянуть на плагин Visual Studio под названием Контроллер стиля кода (http://joel.fjorden.se/static.php?page=CodeStyleEnforcer), который использует расширения dxCore для предоставления обратной связи в режиме реального времени о соответствии вашего кода стандартам кодирования (полностью настраиваемый).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top