C#

Зачем нужен модификатор private в c#?

Смысл? Его нельзя использовать на уровне других сборок, классов и т. д, только внутри данного класса . Я так понимаю это нужно для безопасного кода и выполнение программы без багов, чтобы другой разработчик или пользователь не мог использовать какие-то методы, поля, потому что они могут привести к багам? А поля или методы с private используются в других методах, которые с public .Это так ?
В ООП есть принцип сокрытия данных. Т. е. реализация некоторого механизма в виде класса всегда должна прятать все, что не относится к его использованию или переиспользованию.

1) Соответственно, при использовании программист видит только те объекты (public), которые ему нужны, не вникая в тонкости реализации, не засоряя область видимости теми сущностями, которые для использования не нужны

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

2) Внутренности реализации делаются private, чтобы явно сообщить программистам, которые будут использовать данный класс, что полагаться на эти механизмы нельзя и они могут быть удалены/изменены в любой момент.
Андрей Набиуллин
Андрей Набиуллин
4 588
Лучший ответ
1. Это нужно для безопасности.
2. Это нужно для инкапсуляции, чтобы за пределами класса не было тонн мусора, в котором никто не разберется.
Саня Кравченко
Саня Кравченко
68 429
Дима Хромов Инкапсуляция != скрытие данных. Инкапсуляция - это совмещение в одном объекте данных и методов работы с ними. Можно инкапсулировать все поля и методы как public, при этом данные будут инкапсулированы, но скрытия данных не будет.
Не знаю как в C#, в Java принято всегда обозначать стандартные поля класса модификатором private.
Чтобы редактировать или получать данные с поля, вы должны добавить геттеры и сеттеры.
Например:
public class Person {

private Long id;
private String firstName;
private String lastName;

public final String DEF_GREETING_MESSAGE = "Hello, world!";

public void sayHello() {
System.out.println(DEF_GREETING_MESSAGE);
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

// . .

}
AW
Artur Waleew
1 675
Саня Кравченко Прикол в том, что в C# это Java-безобразие решили свойствами. Можно даже определить автосвойство:
public int MyProp { get; set; }
Такая запись автоматически создаёт необходимые гетеры и сетеры.
Саня Кравченко Причем доступ к полю будет как к переменной, а не как к методу.
Иногда
Server Islyamov
Server Islyamov
768
Сергей Левицкий А можно точнее ?