Классы и объекты в 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ссылается на текущий объект — полезно при совпадении имён параметра и поля.
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.