C#
Зачем нужен модификатор private в c#?
Смысл? Его нельзя использовать на уровне других сборок, классов и т. д, только внутри данного класса . Я так понимаю это нужно для безопасного кода и выполнение программы без багов, чтобы другой разработчик или пользователь не мог использовать какие-то методы, поля, потому что они могут привести к багам? А поля или методы с private используются в других методах, которые с public .Это так ?
В ООП есть принцип сокрытия данных. Т. е. реализация некоторого механизма в виде класса всегда должна прятать все, что не относится к его использованию или переиспользованию.
1) Соответственно, при использовании программист видит только те объекты (public), которые ему нужны, не вникая в тонкости реализации, не засоряя область видимости теми сущностями, которые для использования не нужны
При переиспользовании, когда программисту даётся возможность реализовать наследника класса, некоторые внутренние переменные или методы приходится делать protected, однако такое раскрытие уже ограничивает реализацию исходного класса, фиксируя некоторый интерфейс, от которого в следующих версиях уже нельзя будет избавиться или изменить его, так как код наследников при таких изменениях станет неработоспособен.
2) Внутренности реализации делаются private, чтобы явно сообщить программистам, которые будут использовать данный класс, что полагаться на эти механизмы нельзя и они могут быть удалены/изменены в любой момент.
1) Соответственно, при использовании программист видит только те объекты (public), которые ему нужны, не вникая в тонкости реализации, не засоряя область видимости теми сущностями, которые для использования не нужны
При переиспользовании, когда программисту даётся возможность реализовать наследника класса, некоторые внутренние переменные или методы приходится делать protected, однако такое раскрытие уже ограничивает реализацию исходного класса, фиксируя некоторый интерфейс, от которого в следующих версиях уже нельзя будет избавиться или изменить его, так как код наследников при таких изменениях станет неработоспособен.
2) Внутренности реализации делаются private, чтобы явно сообщить программистам, которые будут использовать данный класс, что полагаться на эти механизмы нельзя и они могут быть удалены/изменены в любой момент.
1. Это нужно для безопасности.
2. Это нужно для инкапсуляции, чтобы за пределами класса не было тонн мусора, в котором никто не разберется.
2. Это нужно для инкапсуляции, чтобы за пределами класса не было тонн мусора, в котором никто не разберется.
Дима Хромов
Инкапсуляция != скрытие данных. Инкапсуляция - это совмещение в одном объекте данных и методов работы с ними. Можно инкапсулировать все поля и методы как 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;
}
// . .
}
Чтобы редактировать или получать данные с поля, вы должны добавить геттеры и сеттеры.
Например:
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;
}
// . .
}
Саня Кравченко
Прикол в том, что в C# это Java-безобразие решили свойствами. Можно даже определить автосвойство:
public int MyProp { get; set; }
Такая запись автоматически создаёт необходимые гетеры и сетеры.
public int MyProp { get; set; }
Такая запись автоматически создаёт необходимые гетеры и сетеры.
Саня Кравченко
Причем доступ к полю будет как к переменной, а не как к методу.
Иногда
Сергей Левицкий
А можно точнее ?
Похожие вопросы
- Нужна помощь с задачей C#
- Нужна помощь с языком C#
- Нужны ли знание алгебры/геометрии для c#.
- Стоит ли дальше учить C#?
- Программирование на C Sharp (C#)
- Сегодня начал учить c#, решил сделать калькулятор простой и столкнулся с такой ошибкой при компиляции, хелпуйте.
- Что лучше C# или C++?
- Зачем разбивать код в C# на отдельные классы?
- Помогите пожалуйста. Написать на C#
- Python, C, C++, C#, Что выбрать-то?