Класс и экземпляр

Класс — это описание того, как устроен объект: какие у него данные и что он умеет делать. Сам по себе класс ничего не делает — это чертёж.

Экземпляр — это конкретный объект, созданный по этому чертежу. Именно с ним ты работаешь в коде.

Ты уже работаешь с экземплярами

HtmlElement — это класс. Он описывает, что умеет любой HTML-элемент: SetValue, GetValue, RiseEvent и так далее.

Когда ты пишешь:

var doc = instance.ActiveTab.MainDocument;
var he = doc.FindElementById("input-text");

he — это экземпляр класса HtmlElement. Конкретный элемент с конкретной страницы.

Другой элемент — другой экземпляр, но того же класса:

var emailField = doc.FindElementById("input-email");
var phoneField = doc.FindElementById("input-tel");

emailField и phoneField — два разных экземпляра одного класса HtmlElement. У каждого свои данные, но одни и те же методы.

Когда создаёшь экземпляр вручную — пишешь new

В ZennoPoster экземпляры HtmlElement и HtmlDocument создаёт сам браузер — ты их только получаешь. Но есть объекты, которые ты создаёшь сам:

var items = new List<string>();
items.Add("Москва");
items.Add("Санкт-Петербург");
items.Add("Екатеринбург");
 
project.SendInfoToLog("городов: " + items.Count);

new List<string>() — создать новый экземпляр класса List<string>. После new всегда идёт имя класса и скобки.

Класс — одна штука, экземпляров — много

var doc = instance.ActiveTab.MainDocument;
 
// три экземпляра одного класса HtmlElement
var f1 = doc.FindElementById("input-text");
var f2 = doc.FindElementById("input-email");
var f3 = doc.FindElementById("textarea-main");
 
f1.SetValue("Иван", false);
f2.SetValue("ivan@mail.ru", false);
f3.SetValue("Комментарий", false);

Класс HtmlElement один. Объектов f1, f2, f3 — три, у каждого свои данные.