Любая причина написать ключевое слово "private" в C#?

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

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

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

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{

}

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

более того, есть ли случай, когда пишется "частное" (в одиночку) будет изменить доступность члена?

9 ответов


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

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

и

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

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


AFAIK, private по умолчанию везде в C#

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

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

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

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

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

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

да, за половину имущества более строгие, чем другие:

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

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

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

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


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

var answer = a + b / c;

вы находите, что неясно без избыточных скобок вокруг b / c?

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


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

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


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

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

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

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

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


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


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

еще одна веская причина-потому что FxCop говорит вам сделать это.


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


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