Любая причина для написания ключевого слова "private" в С#?

Насколько я знаю, private по умолчанию используется везде в С# (это означает, что если я не пишу public, protected, internal и т.д. по умолчанию он будет private), (Пожалуйста, поправьте меня, если я ошибаюсь.)

Итак, какова причина для написания этого ключевого слова или почему он существует даже для членов?

Например, когда обработчик события автогенерируется, он выглядит так:

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{

}

Но почему он даже пишет private, если это подразумевается и по умолчанию? Просто чтобы начинающие разработчики (которые не знают, что это С# по умолчанию) знают, что это частные? Или есть разница для компилятора?

Кроме того, существует ли случай, когда запись "private" (в одиночку) изменит доступность элемента?

Ответ 1

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

Это неверно. Типы, определенные в пространстве имен (классы, структуры, интерфейсы и т.д.), Будут по умолчанию внутренними. Кроме того, члены в разных типах имеют разные возможности доступа по умолчанию (например, public для членов интерфейса). Подробнее см. Уровни доступности в MSDN.

Кроме того,

Итак, какова причина написания этого ключевого слова или почему он даже существует?

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

Ответ 2

AFAIK, private по умолчанию используется везде в С#

Не совсем - по умолчанию используется "самый ограниченный доступ, доступный для этого объявления". Так, например, с типом верхнего уровня значение по умолчанию internal; для вложенного типа по умолчанию используется private.

Итак, какова причина написания этого ключевого слова или почему он даже существует?

Он делает это явным, что хорошо по двум причинам:

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

Что касается вашей последней части:

Кроме того, существует ли случай, когда запись "private" (в одиночку) изменит доступность элемента?

Да, для того, чтобы сделать половину свойства более ограничивающим, чем другое:

// Public getter, public setter
public int Foo { get; set; }

// Public getter, private setter
public int Bar { get; private set; }

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

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

Ответ 3

private добавляет визуальный беспорядок. Тем, кто настаивает на том, чтобы он делал все в явном виде, я бы спросил: вы тоже это делаете с математикой? Например:

var answer = a + b / c;

Вы находите это непонятным без лишних круглых скобок вокруг b / c?

Правило в С# очень просто: По умолчанию все как можно ближе к частному, так как это может быть.. Если вам нужно что-то более заметное, чем значение по умолчанию, добавьте модификатор. В противном случае не добавляйте ненужные ключевые слова в свой код.

Ответ 4

Насколько я знаю, private по умолчанию используется везде в С#

Явное объявление private, означает, что вы знаете. Не просто подумайте, что это так, потому что, насколько вам известно, это значение по умолчанию. Это также означает, что кто-то, кто смотрит на код, знает, что это такое.

Нет "Я думаю, что это", "Я уверен, что это" и т.д. Это просто. И все находятся на одной странице.

Я не разработчик С#. Если бы мне пришлось работать с некоторым кодом, который явно не был объявлен закрытым, я бы предположил, что он является внутренним.

Мне не нравится, когда вещи неявно установлены. Это никогда не так ясно, как когда они явно установлены.

Ответ 5

Читаемость, демонстрация намерения - две великие причины, о которых я могу думать.

Ответ 6

Считываемость. Не все могут знать, что private является поведением по умолчанию.

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

Ответ 7

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

Еще одна веская причина в том, что FxCop говорит вам об этом.

Ответ 8

Многие люди (такие, как я!) регулярно программируют на нескольких языках. Быть явным с такими вещами не позволяет мне запомнить все тайные детали всех языков, в которых я программирую.

Ответ 9

Я бы сказал, что для согласованности с читабельностью области остальной части класса.