Любая причина для написания ключевого слова "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
Я бы сказал, что для согласованности с читабельностью области остальной части класса.