1. Введение
Как вы уже слышали, класс – это шаблон, а объект – его экземпляр.
Но пришло время разобраться в классах и объектах более глубоко!
Представьте, что вы — инженер-конструктор на автомобильном заводе. Вместо того чтобы вручную собирать каждую машину, вы создаёте чертёж — универсальную инструкцию, по которой можно собирать множество автомобилей одного типа. В этом чертеже указано, что у машины должен быть двигатель, колёса, кузов, цвет, и какие функции она выполняет.
Этот чертёж в мире программирования называется классом.
А теперь представьте, что по этому чертежу завод выпустил партию машин. Каждая из них — реальная, едет по дороге, у неё свой номер, цвет, и даже какие-то индивидуальные настройки. Но все они собраны по одному и тому же чертежу.
Эти реальные машины в мире программирования называются объектами (или экземплярами класса).
Итак, запомним:
- Класс — это как чертёж, шаблон, схема. Он описывает, какие данные могут быть у чего-то (например, марка, цвет, количество дверей) и что это что-то может делать (например, ехать, тормозить, сигналить). Класс — это просто описание, он сам по себе не занимает много места в памяти и не является чем-то "живым".
- Объект — это конкретная "машина", собранная по чертежу класса. Это реальная, "живая" сущность в вашей программе, которая занимает место в памяти, имеет свои уникальные значения для данных (свой номер, цвет) и может выполнять действия, описанные в классе.
Звучит немного абстрактно? Не волнуйтесь, сейчас всё разберём.
2. Что такое класс?
Класс — это пользовательский тип данных, который описывает, каким образом должны выглядеть объекты этого типа: какие у них есть характеристики (состояния/свойства/поля) и какие действия можно с ними выполнять (поведение/методы/функции).
Класс определяет:
- Поля (переменные) — данные, которые хранятся в объекте.
- Методы (функции) — действия, которые может выполнять объект.
- Свойства — специальные методы для доступа к данным.
- События — механизмы для уведомления (о них позже).
- Конструкторы — специальные методы для создания объектов.
public class Person
{
// Поля (данные)
public string Name;
public int Age;
// Метод (действие)
public void SayHello()
{
Console.WriteLine($"Привет! Меня зовут {Name}, мне {Age} лет.");
}
}
В этом примере мы объявили класс Person. У него есть два поля (Name и Age) и метод SayHello(). Это всё, что нужно для простейшего класса.
3. Что такое объект?
Объект — это экземпляр класса, то есть конкретная сущность, созданная в памяти по "чертежу" (классу).
Когда вы создаёте переменную типа Person, вы получаете объект — с уникальными значениями для каждого поля. Не просто человека, а, скажем, человека по имени Джонни, которому 12 лет. И когда он с нами здоровается (то есть вызывается метод SayHello()), он нам "сообщает" информацию о себе.
// Создаём объект класса Person
Person person1 = new Person();
person1.Name = "Алиса";
person1.Age = 28;
person1.SayHello(); // => Привет! Меня зовут Алиса, мне 28 лет.
// Создаём ещё одного "человека"
Person person2 = new Person();
person2.Name = "Боб";
person2.Age = 32;
person2.SayHello(); // => Привет! Меня зовут Боб, мне 32 лет.
Каждый объект — это не просто копия: это независимая сущность со своими данными (в нашем примере — имена и возраст).
4. Главное отличие класса и объекта
Главное отличие:
- Класс — "чертёж", инструкция, тип данных.
- Объект — конкретный представитель этого типа; реальный "дом", собранный по плану; "машина", произведённая по чертежу.
Можно создать сколько угодно объектов одного класса. Например, если у вас есть класс Person, вы можете создать миллион "человеков" в программе.
Почему это удобно и важно?
Попробуем представить программу без классов. Если бы у нас был список студентов, приходилось бы хранить имя, возраст, оценки и прочие данные в отдельных массивах для каждого параметра:
string[] studentNames = { "Сергей", "Гриша", "Маша" };
int[] studentAges = { 20, 19, 21 };
// Если потребуется добавить ещё одно свойство, появится ещё один массив.
// Попытка переставить местами пару человек превращается в сущий кошмар!
Используя классы, данные не расползаются по разным массивам, а логично группируются:
public class Student
{
public string Name;
public int Age;
}
Student[] students = new Student[3];
students[0] = new Student { Name = "Сергей", Age = 20 };
students[1] = new Student { Name = "Гриша", Age = 19 };
students[2] = new Student { Name = "Маша", Age = 21 };
Гораздо понятнее и удобнее! К тому же к каждому студенту теперь можно добавить методы (например, "поздороваться" или "рассчитать среднюю оценку").
Картинка: связь класса и объекта
+------------------+ +----------------+
| class Person |=========>| person1: |
| (чертёж/тип) | | Name = "Алиса"|
| | /| Age = 28 |
+------------------+ / +----------------+
/
+------------------------/----------------------+
/
+----------------+
| person2: |
| Name = "Боб" |
| Age = 32 |
+----------------+
5. Где применяются классы и объекты в реальной жизни?
Классы и объекты — основа для любого приложения на C#. Всё, что вы видите вокруг в .NET: окна, кнопки, формы, массивы, коллекции, соединения с базой данных, логи — это объекты, созданные по определённым классам.
Примеры:
- Класс Button — это инструкция, как должна выглядеть кнопка на экране. Каждый раз, когда вы создаёте новую кнопку — это объект класса.
- Класс Stream (из системы ввода-вывода): вы получаете объект, который работает с файлами.
- Ваш будущий класс User для хранения информации о пользователях — снова тот же шаблон.
Коротко про имена, модификаторы и конвенции
- Для классов принято использовать имена с большой буквы, например Person, Order, Product.
- Для переменных — с маленькой буквы, например person, user1, orderList.
- Чаще всего класс делают public — чтобы он был доступен везде в проекте.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ