Классы и объекты в C#

Классы и объекты в C#: как объявить класс, создать объект, задать поля, свойства и конструктор — основы ООП.

Класс — шаблон, описывающий данные и поведение объекта. Объект — конкретный экземпляр класса, созданный с помощью new. Один класс может породить сколько угодно объектов.

Первый класс

class Dog
{
    public string Name;   // поле
    public string Breed;
    public int Age;

    public void Bark()    // метод
    {
        Console.WriteLine($"{Name} говорит: Гав!");
    }
}

// Создание объектов
Dog dog1 = new Dog();
dog1.Name  = "Бобик";
dog1.Breed = "Лабрадор";
dog1.Age   = 3;

Dog dog2 = new Dog();
dog2.Name = "Шарик";

dog1.Bark();
dog2.Bark();

Вывод:

Бобик говорит: Гав!
Шарик говорит: Гав!

Свойства (get / set)

Свойства — умные поля: они контролируют чтение и запись значения. Стандартная практика в C# — закрыть поле как private и дать доступ через свойство:

class Person
{
    private int _age;  // приватное поле

    public int Age     // свойство
    {
        get { return _age; }
        set
        {
            if (value < 0) _age = 0;   // защита от отрицательного возраста
            else _age = value;
        }
    }

    // Автосвойство — когда проверка не нужна
    public string Name { get; set; }
}

var p = new Person();
p.Name = "Алиса";
p.Age  = -5;  // сработает проверка
Console.WriteLine($"{p.Name}, возраст: {p.Age}");

Вывод:

Алиса, возраст: 0

Конструктор

Конструктор — специальный метод с тем же именем, что и класс. Вызывается при new и инициализирует объект:

class Car
{
    public string Model { get; set; }
    public int Year { get; set; }

    // Конструктор
    public Car(string model, int year)
    {
        Model = model;
        Year  = year;
    }

    public void Info()
    {
        Console.WriteLine($"{Model} ({Year})");
    }
}

var car1 = new Car("Tesla Model 3", 2023);
var car2 = new Car("Lada Granta",   2021);
car1.Info();
car2.Info();

Вывод:

Tesla Model 3 (2023)
Lada Granta (2021)

Если вы не объявили конструктор, C# подставляет пустой конструктор по умолчанию. Как только вы объявили свой, конструктор по умолчанию исчезает — если нужны оба, добавьте второй явно.

Ключевое слово this

this ссылается на текущий объект. Помогает разрешить конфликт имён между параметром и полем:

class Point
{
    public double X { get; set; }
    public double Y { get; set; }

    public Point(double x, double y)
    {
        this.X = x;  // this.X — поле, x — параметр
        this.Y = y;
    }
}

Коротко

  • Класс — шаблон; объект — конкретный экземпляр, созданный через new.
  • Свойства (get/set) контролируют доступ к данным; автосвойства — краткая форма без поля.
  • Конструктор вызывается при new и задаёт начальное состояние объекта.
  • this ссылается на текущий объект — полезно при совпадении имён параметра и поля.
Проверьте себя
1. Что такое конструктор?
AМетод для уничтожения объекта
BСтатический метод класса
CСвойство с get и set
DСпециальный метод, вызываемый при создании объекта через new
2. Что делает автосвойство: public string Name { get; set; }?
AСоздаёт поле Name только для чтения
BЭто синтаксическая ошибка
CСоздаёт статическое поле
DСоздаёт свойство с приватным полем-хранилищем автоматически
3. Для чего используется this внутри класса?
AДля вызова базового класса
BДля ссылки на текущий экземпляр объекта
CДля объявления статического метода
DДля создания нового объекта

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.