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


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

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

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

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{

}

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

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

9 100

9 ответов:

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

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

и

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

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

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

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

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

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

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

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

кроме того, есть ли случай, когда написание "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 говорит вам сделать это.

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

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