Инкапсуляция

Инкапсуляция — это когда класс скрывает свои внутренние данные и не даёт менять их напрямую. Вместо этого — только через методы или свойства.

Ты уже с этим сталкивался

Нельзя вот так поменять 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;     // доступно снаружи
}