Инкапсуляция
Инкапсуляция — это когда класс скрывает свои внутренние данные и не даёт менять их напрямую. Вместо этого — только через методы или свойства.
Ты уже с этим сталкивался
Нельзя вот так поменять id элемента:
he.id = "new-id"; // ошибка — поле недоступно напрямуюКласс HtmlElement не разрешает лезть внутрь и менять что попало. Это и есть инкапсуляция.
Хочешь изменить значение элемента — используй метод, который класс предоставил специально для этого:
he.SetValue("новый текст", false); // так можноЗачем это нужно
Если бы поля были открыты, можно было бы записать что угодно и сломать логику объекта. Метод же может проверить данные перед тем, как применить их.
Модификаторы доступа
Когда пишешь свой класс, ты сам решаешь что открыть, а что скрыть.
class FormFiller
{
// private — видно только внутри класса
private string _url;
// public — доступно снаружи
public string LastFilledId;
// public метод — единственный способ снаружи задать url
public void SetUrl(string url)
{
if (url.StartsWith("http"))
{
_url = url;
}
}
public void Fill(IInstance instance)
{
var doc = instance.ActiveTab.MainDocument;
var he = doc.FindElementById("input-email");
he.SetValue("test@mail.ru", false);
LastFilledId = "input-email";
}
}private— поле или метод видны только внутри классаpublic— поле или метод видны везде
Правило по умолчанию
Если не написать модификатор — C# считает поле или метод private. Поэтому явно пиши public у всего, что должно быть доступно снаружи.
class Example
{
string hidden; // неявно private
private string alsoHidden; // явно private — то же самое
public string visible; // доступно снаружи
}