Зачем мне отмечать приватные переменные как приватные, если они уже есть? - PullRequest
3 голосов
/ 16 февраля 2009

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

class Foo
{
  private string bar;
}

class Foo
{
  string bar;
}

Полагаю, эти два объявления равны.

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

Ответы [ 10 ]

27 голосов
/ 16 февраля 2009

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

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

void Foo() {}
class Bar {}

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

15 голосов
/ 16 февраля 2009

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

Причины неявного указания:

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

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

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

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

7 голосов
/ 16 февраля 2009

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

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

private string _bar;
4 голосов
/ 16 февраля 2009

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

void myMethod()
{

}

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

4 голосов
/ 16 февраля 2009

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

3 голосов
/ 16 февраля 2009

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

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

2 голосов
/ 16 февраля 2009

Явное использование 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;) устранит путаницу.

1 голос
/ 16 февраля 2009

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

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

1 голос
/ 16 февраля 2009

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

0 голосов
/ 16 февраля 2009

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

...