Нужно ли C# частное ключевое слово?

(вдохновленный этим комментарием)

Есть ли когда-нибудь ситуация, в которой вам нужно использовать private ключевое слово?
(Другими словами, ситуация, в которой пропуск ключевого слова может привести к другому поведению)

4 ответа

Решение
public class Foo
{
    public int Bar { get; private set; }
}

Пропуск слова "частный" изменит доступность.

ситуация, в которой опущено ключевое слово [private] приведет к другому поведению

Ответ Дэвида Йоу дал самую обычную ситуацию. Вот еще один:

В Account_generated.cs:

// Generated file. Do not edit!

public partial class Account
{
  ...

  private partial class Helper
  {
    ...
  }

  ...
}

В AccountHandCoded.cs:

public partial class Account
{
  ...

  public partial class Helper
  {
    ...
  }

  ...
}

Приведенный выше код не будет компилироваться. Первая "часть" Account требует вложенного класса Helper быть private, Поэтому попытка кодировщика сделать Helper публика должна потерпеть неудачу!

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

Таким образом, для partial классы (и структуры, интерфейсы), объявление без уровня доступа

partial class Name

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

Принимая во внимание, что явно предоставляя доступность по умолчанию (которая internal для не вложенных типов и private для вложенных) означает "этот класс должен иметь максимально ограниченный доступ, а другие" части "не могут изменить этот факт".

В C# версии 7.2 и выше.

private protected Комбинация ключевых слов является модификатором доступа члена. Закрытый защищенный член доступен по типам, производным от содержащего класса, но только внутри его содержащей сборки.

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/private-protected

private не о поведении во время выполнения. Это сделать ваше приложение обслуживаемым. Что скрыто private может повлиять только на код за пределами своего класса через public или же protected члены.

Таким образом, ответ "нет" для поведения во время выполнения, "да" для поведения разработчика!

Другие вопросы по тегам