Нужно ли C # частное ключевое слово? - PullRequest
24 голосов
/ 14 июня 2011

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

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

Ответы [ 4 ]

46 голосов
/ 14 июня 2011
public class Foo
{
    public int Bar { get; private set; }
}

Если пропустить слово «private», это изменит доступность.

8 голосов
/ 12 сентября 2013

ситуация, в которой пропуск ключевого слова [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 для вложенных) означает, что «этот класс должен иметь максимально ограниченный доступ, а другие« части »не могутизменить этот факт ".

1 голос
/ 14 июня 2011

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

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

0 голосов
/ 23 июня 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...